(mit Django 1.11.5)Django - Benutzerdefinierte Methode in Modell speichern
Traditionell habe, habe ich immer ein Modell wie folgt:
class Animal(models.Model):
is_hungry = models.BooleanField(default=True)
Dann Änderungen wie folgt:
animal = Animal()
animal.save()
animal.is_hungry = True
animal.save()
Vor kurzem sah ich einen Freund, ein Modell mit einem benutzerdefinierten Speichermethode definieren:
class Animal(models.Model):
is_hungry = models.BooleanField(default=True)
def feed_animal(self):
self.is_hungry = False
self.save()
Und ruft diese Methode wie erwartet zu funktionieren scheint:
>>> from testapp.models import Animal
>>> a = Animal()
>>> a.save()
>>> a.is_hungry
True
>>>
>>> a.feed_animal()
>>> a.is_hungry
False
es irgendwelche Vorteile/Nachteile, wie eine benutzerdefinierte Speichermethode in der Modelldefinition bei der Definition? Gibt es einen Grund, das Objekt .save()
direkt anzurufen?
gibt es keine Nachteile, aber es könnte nicht best practice seine implizit zu haben spart in Methoden Modell begraben. Es wäre sauberer, die feed_animal-Methode zu definieren, die nur den Status des Modellobjekts ändert und das Speichern dem view.py-Code überlässt. –
@ Jarek.D - Sie würden immer noch empfehlen, die 'feed_animal()' Methode beizubehalten, entfernen Sie einfach die 'self.save()'? –
Ja, aber wenn feed_animal() nur den Status des Attributs wirklich ändert, ist es nicht sehr pythonisch - mach einfach a.is_hungry = Falsch –