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")
常に完全にバイパスできる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
客観的に優れているだけのオーバーライドですか?