Django model manager objects.create เอกสารอยู่ที่ไหน


86

ฉันมักจะอ่านว่าฉันควรใช้

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

แต่ฉันเพิ่งเห็นว่ามีการสร้างฟังก์ชันผู้จัดการเนื่องจากฉันเห็นแอป django ของ opensource ใช้งานอยู่

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

จึงแนะนำให้ใช้หรือไม่? หรือยังคงต้องการใช้วิธีการ. save ฉันเดาว่า objects.create จะพยายามสร้างมันไม่ว่าจะเป็นอะไรก็ตามในขณะที่ save อาจบันทึกอ็อบเจกต์ที่มีอยู่หากระบุ pk

นี่คือเอกสารที่ฉันพบ: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
ทำไมคำถามนี้ถึงได้รับการโหวตลดลง? ฉันเพิ่งมาถึงที่นี่ด้วยคำถามเดียวกันและพบว่ามีประโยชน์
Ferguzz

4
ฉันก็ไม่รู้เหมือนกันบางทีคนอาจคิดว่ามันโง่และชัดเจน อย่าไปสนใจมันมาก: P ฉันได้รับคำตอบแล้วฉันมีความสุข ฉันยังค้นหาโดยไม่มีผลลัพธ์ดังนั้นฉันจึงถาม
Sam Stoelinga

คำตอบ:



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 หมายความว่าวัตถุใหม่จะถูกสร้างขึ้นเสมอ
โดยปกติคุณจะไม่ต้องกังวลเกี่ยวกับเรื่องนี้ อย่างไรก็ตามหากโมเดลของคุณมีค่าคีย์หลักแบบกำหนดเองที่คุณตั้งไว้และหากมีค่านั้นอยู่แล้วในฐานข้อมูลการเรียกสร้าง () จะล้มเหลวด้วย IntegrityError เนื่องจากคีย์หลักต้องไม่ซ้ำกัน เตรียมพร้อมที่จะจัดการกับข้อยกเว้นหากคุณใช้คีย์หลักแบบแมนนวล


3

สร้างโดยพื้นฐานแล้วไม่เหมือนกัน ด้านล่างนี้คือซอร์สโค้ดสำหรับสร้าง

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

โดยทั่วไปสองวิธีนี้เทียบเท่ากัน การใช้งานModel.objects.createอาจเป็นที่ต้องการเนื่องจากเหมาะกับสไตล์ของ Django มากกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.