Al leer los documentos de Django , se aconseja crear un método de creación personalizado para un modelo denominado Foodefiniéndolo como create_fooen el administrador:
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")
Mi pregunta es por qué se prefiere el anterior a simplemente anular el createmétodo de la clase base :
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 parece que solo anular createevitará que alguien lo use accidentalmente para hacer una instancia de modelo mal formada, ya create_fooque siempre se puede omitir por completo:
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")
¿Hay alguna ventaja en hacerlo como sugieren los documentos, o en realidad se anula createsolo objetivamente mejor?
fuente
