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सिर्फ उद्देश्यपूर्ण रूप से बेहतर है?