2009-08-17 7 views
0

'Ello, alle. Ich versuche, ein Modell in Django zu erstellen, das auf einem anderen Modell basiert, aber keine Unterklasse oder DB-Beziehung zu einem anderen Modell hat. Mein Originalmodell sieht ungefähr so ​​aus: Es speichert einige Daten mit einem Datums-/Zeitstempel.Wie man ein Modell in Django ohne Subclassing klont/mutiert

class Entry(Model): 
    data1 = FloatField() 
    data2 = FloatField() 
    entered = DateTimeField() 

Ich würde auch für jeden dieser Einträge auf täglicher Basis die numerischen Daten aggregieren möchten, mit Hilfe eines Modells, das fast identisch ist. Für die DailyAvg() Variante werden wir eine Datefield() anstelle eines Datetimefield() verwenden, da es nur einen Durchschnitt pro Tag sein wird:

class EntryDailyAvg(Model): 
    data1 = FloatField() 
    data2 = FloatField() 
    entered = DateField() 

So ist das Problem: Es wird viel sein von diesen Datenklassen, die ein entsprechendes tägliches Durchschnittsmodell benötigen, das in der Datenbank gespeichert ist, und die Definitionen sind fast identisch. Ich könnte einfach eine Definition für eine äquivalente DailyAvg() - Klasse für jede Datenklasse eingeben, aber das scheint DRY zu verletzen, und es ist auch ein großer Schmerz in den Arsch. Ich kann auch keinen EntryDailyAvg Subclass Eintrag haben, da Django jedes Mal, wenn ich ein neues EntryDailyAvg speichere, eine neue Entry Base speichert.

Gibt es eine Möglichkeit, die DailyAvg() - Klasse automatisch (-magisch?) Zu generieren?

Vielen Dank im Voraus!

+0

Und Sie sind nicht Unterklasse 'Eintrag' weil ...? –

+0

Eigentlich tat ich an einem Punkt, und vergaß, dass jedes Mal, wenn Sie die Kindklasse speichern, eine Instanz der Elternklasse ebenfalls gespeichert wird. Ich habe mich immer gefragt, woher all die zusätzlichen Entry() s kommen - sie wurden jedes Mal gespeichert, wenn ich ein DailyAvg() speichere, also habe ich am Ende nur die Entry-Tabelle "verschmutzt". –

Antwort

2

Was passiert, wenn Sie eine AbstractEntry-Klasse mit allen data1 Zeug und dann zwei Unterklassen erstellen: Entry und EntryDailyAvg.

Überprüfen Sie die Dokumente für Informationen darüber, wie man Django sagt, dass eine Klasse abstrakt ist.

+0

Abstrakte Klassen sind neu in 1.1, oder? Hatte nicht daran gedacht. Vielen Dank! –