Question Django model manager objects.create où est la documentation?


Je lis toujours que je devrais utiliser

model = Model(a=5, b=6)
model.save()

Mais je viens de voir qu'il y a une fonction de création de gestionnaire, car j'ai vu une application django opensource l'utilisant.

model = Model.objects.create(a=5, b=6)
print model.pk
1

Alors, est-il suggéré de l'utiliser? Ou est-il toujours préférable d'utiliser la méthode .save. Je suppose que objects.create va essayer de le créer, peu importe quoi, alors que save peut enregistrer un objet existant si le pk est spécifié.

Ce sont les documents que j'ai trouvés: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


78
2018-03-30 09:51


origine


Réponses:


C'est dans la page "Référence de l'API QuerySet", lié à l’index de la documentation.


33
2018-03-30 09:55



p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

équivalent à:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True)

La force_insert signifie qu'un nouvel objet sera toujours créé.
  Normalement, vous n'aurez pas à vous soucier de cela. Cependant, si votre modèle   contient une valeur de clé primaire manuelle que vous définissez et si cette valeur   existe déjà dans la base de données, un appel à create () échouera avec un   IntegrityError puisque les clés primaires doivent être uniques. Être préparé à   gérez l'exception si vous utilisez des clés primaires manuelles.


40
2018-05-23 06:38



Fondamentalement, ces deux méthodes sont équivalent. L'utilisation de Model.objects.create pourrait être préféré car il est plus adapté au style de Django.


1
2018-03-30 10:04



créer fait essentiellement la même chose. ci-dessous est le code source pour créer.

def create(self, **kwargs):
    """
    Creates 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

il crée une instance et l'enregistre ensuite.


1
2017-07-08 20:54