การอ่านเอกสาร Django ขอแนะนำให้สร้างวิธีการสร้างที่กำหนดเองสำหรับแบบจำลองที่มีชื่อFoo
โดยกำหนดไว้create_foo
ในตัวจัดการ:
class BookManager(models.Manager):
def create_book(self, title):
book = self.create(title=title)
# do something with the book
return book
class Book(models.Model):
title = models.CharField(max_length=100)
objects = BookManager()
book = Book.objects.create_book("Pride and Prejudice")
คำถามของฉันคือทำไมก่อนหน้านี้ชอบที่จะเอาชนะcreate
วิธีการของชั้นฐาน:
class BookManager(models.Manager):
def create(self, title):
book = self.model(title=title)
# do something with the book
book.save()
return book
class Book(models.Model):
title = models.CharField(max_length=100)
objects = BookManager()
book = Book.objects.create("Pride and Prejudice")
Imo ดูเหมือนว่าการเอาชนะเท่านั้นที่create
จะป้องกันไม่ให้ใครใช้โดยไม่ได้ตั้งใจเพื่อสร้างอินสแตนซ์โมเดลที่มีรูปแบบcreate_foo
ไม่ถูกต้องเนื่องจากสามารถข้ามได้โดยสมบูรณ์:
class BookManager(models.Manager):
def create_book(self, title):
book = self.create(title=title, should_not_be_set_manually="critical text")
return book
class Book(models.Model):
title = models.CharField(max_length=100)
should_not_be_set_manually = models.CharField(max_length=100)
objects = BookManager()
# Can make an illformed Book!!
book = Book.objects.create(title="Some title", should_not_be_set_manually="bad value")
มีข้อได้เปรียบอะไรบ้างในการทำเช่นเดียวกับที่เอกสารแนะนำหรือที่จริงแล้วการเอาชนะนั้นcreate
ดีกว่าอย่างเป็นกลาง?