Django - Python Webframework
Posts 1-3 of 3
-
Martin Geber Group moderatorThe company name is only visible to registered members.Modelsubclassing
Hallo,
Arne Brodowski hat Modelsubclassing hier in den Raum gestellt:
https://www.xing.com/app/forum?op=showarticles;id=6244646;ar...
Er verweist hier her:
http://code.djangoproject.com/wiki/ModelInheritance
Dieses Thema kann und sollte hier diskutiert werden.
Liebe Grüße.
- 06 Nov 2007, 7:39 pm
-
Martin Geber Group moderatorThe company name is only visible to registered members.Re: Modelsubclassing
(Habe das Thema hier stellvertretend für Arne eröffnet, weshalb ich hier gesondert antworte.)
Das Modelsubclassig hat meines Erachtens nach ein Massives Problem:
Was bedeutet die Ableitung? In dem Link oben ist "einfach" ein FOREIGNKEY genutzt wurden. Was aber, wenn ich keine OneToMany-Beziehung haben will? Sondern, z.B. das UserProfile-Model von User ableite, was eine OnetoOne-Beziehung darstellen soll.
Sicherlich gibt es auch ManyToMany-Beziehungen, die aus der Vererbung möglich sind.
Wenn das sauber getrennt ist und klar ist, dann kann man über Midelsubclassing nachdenken, denke ich.
Liebe Grüße
Martin
- 06 Nov 2007, 7:47 pm
-
Arne BrodowskiThe company name is only visible to registered members.Re^2: Modelsubclassing
Also mir stellt sich das Problem mit OneToOne, OneToMany etc. gar nicht, da es für mich um Vererbung auf Klassenebene und nicht auf Instanzebene geht. Vererbung die eben genauso funktioniert wie in der normalen OOP. In dem verlinkten Wiki wird diskutiert, wie man diese Vererbung am besten in Django umsetzt.
Was ich z.B. in meiner models.py machen möchte ist folgendes:
class Asset(models.Model):
...
class Picture(Asset):
...
class Movie(Asset):
....
Die Klasse (bzw. das Model) Asset implementiert alle Mechanismen zum Speichern der Dateien und die Klassen Picture und Movie erben diese komplette funktionalität - zusätzlich implementieren beide eine Methode um ein Thumbnail zu erzeugen (wobei wir annehmen, dass sich der Vorgang unterscheidet).
Ich kann nun im Rest der Anwendung mit "Assets" arbeiten und brauch mich nicht drum kümmern wie jedes einzelne seine Thumbnails handhabt.
Ohne Vererbung habe ich zwei Möglichkeiten, entweder habe ich wilde if-Konstrukte die entscheiden um was für eine Datei es sich handelt und dann entscheiden wie man das Thumbnail handhabt, oder ich habe zwei eigenständige Models (Picture und Movie) die dann aber sicher in dem ein oder anderem Punkt das DRY Prinzip verletzen und so etwas wie Assets.objects.all() ist dann (ohne custom manager) auch nicht möglich und ich habe zwei im Prinzip gleiche Tabellen in der Datenbank.
- 07 Nov 2007, 12:19 am
