Beim Lesen der Django-Dokumente wird empfohlen, eine benutzerdefinierte Erstellungsmethode für ein Modell zu erstellen , Foo
indem Sie es wie create_foo
im Manager definieren:
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")
Meine Frage ist, warum die vorherige der einfachen Überschreibung der create
Methode der Basisklasse vorgezogen wird:
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 scheint es, dass nur das Überschreiben create
verhindert, dass jemand es versehentlich verwendet, um eine fehlerhafte Modellinstanz zu erstellen, da create_foo
immer vollständig umgangen werden kann:
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")
Gibt es einen Vorteil, wenn Sie dies tun, wie es die Dokumente vorschlagen, oder ist das Überschreiben create
nur objektiv besser?