Djangoモデルマネージャーobjects.createドキュメントはどこにありますか?


85

私はいつも使うべきだと読んでいます

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

しかし、オープンソースのdjangoアプリがそれを使用しているのを見たので、マネージャー関数createがあるのを見ました。

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

それで、それを使用することをお勧めしますか?または、.saveメソッドを使用することをお勧めします。pkが指定されている場合、objects.createはそれを作成しようとしますが、saveは既存のオブジェクトを保存する可能性があると思います。

これらは私が見つけたドキュメントです:https//docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
なぜこの質問は反対票を獲得したのですか?私はちょうど同じ質問でここに到着し、これが役に立つと思いました。
Ferguzz 2012

4
私も知りませんでした、多分人々はそれが愚かで明白だと思ったでしょう。それについてはあまり気にしないでください:P私は私の答えを幸せにしました。結果なしで検索したので聞いてみました。
Sam Stoelinga 2012

回答:



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

に相当:

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

force_insertは、新しいオブジェクトが常に作成されることを意味します。
通常、これについて心配する必要はありません。ただし、モデルに設定した手動の主キー値が含まれていて、その値がデータベースにすでに存在する場合、主キーは一意である必要があるため、create()の呼び出しはIntegrityErrorで失敗します。手動の主キーを使用している場合は、例外を処理する準備をしてください。


3

createは基本的に同じことをします。以下はcreateのソースコードです。

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

インスタンスを作成して保存します。


1

基本的に、これら2つの方法は同等です。Model.objects.createDjangoのスタイルにより適しているため、の使用法をお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.