Det finns många sätt att lösa problemet du har beskrivit:
- Applikationslogik
- Visningsspecifik logik -- Om beteendet är specifikt för en enskild vy, lägg sedan in ändringarna i vyn.
- Modellspecifik logik -- Om beteendet är specifikt för en enskild modell, åsidosätt metoden save() för modellen.
- Middleware Logic -- Om beteendet är relaterat till flera modeller ELLER behöver lindas runt en befintlig applikation kan du använda Djangos för-spara/efter-spara-signaler för att lägga till ytterligare beteenden utan att ändra själva programmet.
- Lagrade databasprocedurer -- Normalt en möjlighet, men Djangos ORM använder dem inte. Ej portabel över databaser.
- Databasutlösare -- Inte portabel från en databas till en annan (eller ens en version av en databas till nästa), men låter dig kontrollera delat beteende över flera (möjligen icke-Django) applikationer.
Personligen föredrar jag att antingen åsidosätta save()-metoden eller använda en Django-signal. Genom att använda vyspecifik logik kan du fånga dig på stora applikationer med flera vyer av samma modell(er).