En lisant les documents Django , il conseille de faire une méthode de création personnalisée pour un modèle nommé Foo
en le définissant comme create_foo
dans le gestionnaire:
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")
Ma question est la suivante: pourquoi la précédente est-elle préférable à simplement remplacer la create
méthode de la classe de 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, il semble que seule la substitution create
empêchera quiconque de l'utiliser accidentellement pour créer une instance de modèle mal formée, car elle create_foo
peut toujours être contournée complètement:
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")
Y a-t-il un avantage à le faire comme le suggèrent les documents, ou est-ce que remplacer est create
simplement mieux objectivement?