2012-04-04 1 views
1

Ich habe ein Modell wie das folgende, das zu groß wird und in eine separate aktive Tabelle aufgeteilt werden muss. Am Ende des Tages enthält eine Tabelle alle Objekte und die andere enthält nur aktive Objekte.Erstellen Sie Active/Archive-Modelle auf eine trockene Weise (Django)

class Tickets(models.Model): 
     price = .... 
     number = ..... 
     date = .... 
     active = .... 
     parent = models.ForeignKey('self', related_name='children') 

     ManyMoreFields 

Es gibt zwei Quellen der Komplexität:

1) Das übergeordnete Feld auf der ActiveTickets Tabelle auf die Tickets Tabelle zeigen wird. Der verwandte Name sollte nicht geändert werden.

2) Die ActiveTickets und Tickets-Tabelle haben beide Proxy-Modelle, die von ihnen erben.

 class CityTickets(Tickets): 

      class Meta: 
      proxy = True 


    class ActiveCityTickets(ActiveTickets): 
      class Meta: 
      proxy = True 

Offensichtlich konnte ich einfach alle Felder in Ticket kopieren und einfügen (es gibt viele), aber das ist nicht der richtige Weg, es zu tun. Ich habe versucht, abstrakte Vererbung und Mixins (Definieren der Felder in einer separaten Klasse, die von Tickets und ActiveTickets vererbt wird) zu verwenden.

Ein Problem mit der abstrakten Vererbung ist, dass das ForeignKey-Feld, Eltern, Probleme verursacht, da es doppelt ist und der verwandte Name derselbe ist. Im Allgemeinen haben meine Versuche dazu geführt, dass meine Geräte- und Funktionstests fehlgeschlagen sind.

Was sind einige elegante Ansätze hier? Sollte ich darüber nachdenken, zwei separate MySQL-Tabellen zu erstellen und dann nur ein einzelnes Modell mit mehreren Managern (und DB-Routern) zu verwenden? Ist das vernünftig?

Antwort