Jason Kim
Jason Kim

Reputation: 143

Django in Queryset.create() method, what is 'self._for_write' for?

In this code below, what does the code self._for_write mean?

def create(self, **kwargs):
    """
    Create a new object with the given kwargs, saving it to the database
    and returning the created object.
    """
    obj = self.model(**kwargs)
    self._for_write = True
    obj.save(force_insert=True, using=self.db)
    return obj

Upvotes: 5

Views: 406

Answers (1)

Hoang Dung Pham
Hoang Dung Pham

Reputation: 376

base on django.db.models.query.QuerySet.db

@property
def db(self):
    """Return the database used if this query is executed now."""
    if self._for_write:
        return self._db or router.db_for_write(self.model, **self._hints)
    return self._db or router.db_for_read(self.model, **self._hints)

It mean when your QuerySet has self._for_write == True, it will trigger your query using db_for_write. For more details, please read Django document db_for_write

Upvotes: 2

Related Questions