Django model yöneticisi nesneleri.create belgeleri nerede?


86

Her zaman kullanmam gerektiğini okudum

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

Ama bir yönetici işlevi yarattığını gördüm, çünkü onu kullanan açık kaynaklı bir django uygulaması gördüm.

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

Öyleyse kullanılması önerilir mi? Veya yine de .save yönteminin kullanılması tercih edilir. Tahmin ediyorum ki, objects.create ne olursa olsun onu yaratmaya çalışacak, oysa save, pk belirtilmişse mevcut bir nesneyi kaydedebilir.

Bulduğum dokümanlar: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
bu soru neden olumsuz oy aldı? buraya aynı soruyla geldim ve bunu faydalı buldum.
Ferguzz

4
Ayrıca bilmiyordum, belki insanlar aptalca ve açık olduğunu düşünüyorlardı. Çok fazla umursama: P cevabımı mutluyum. Ben de sonuçsuz aradım ve sordum.
Sam Stoelinga

Yanıtlar:



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

eşittir:

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

Force_insert, her zaman yeni bir nesnenin yaratılacağı anlamına gelir.
Normalde bunun için endişelenmenize gerek yoktur. Bununla birlikte, modeliniz ayarladığınız bir manuel birincil anahtar değeri içeriyorsa ve bu değer veritabanında zaten mevcutsa, create () öğesine yapılan bir çağrı, birincil anahtarların benzersiz olması gerektiğinden bir IntegrityError ile başarısız olur. El ile birincil anahtarlar kullanıyorsanız, istisnayı işlemeye hazır olun.


3

create aslında aynı şeyi yapar. aşağıda create için kaynak kod bulunmaktadır.

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

bir örnek oluşturur ve ardından kaydeder.


1

Temel olarak, bu iki yöntem eşdeğerdir . Model.objects.createDjango tarzına daha uygun olduğu için kullanımı tercih edilebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.