2012-04-04 5 views
1

次のようなモデルがありますが、サイズが大きくなりすぎて別のアクティブなテーブルに分割する必要があります。 1日の終わりに、1つのテーブルにすべてのオブジェクトが含まれ、他のテーブルにはアクティブなオブジェクトのみが含まれます。DRY方法でアクティブ/アーカイブモデルを作成する(Django)

1)ActiveTicketsテーブル上の親フィールドは、チケットのテーブルを指すように起こっている:

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

     ManyMoreFields 

は、複雑さの二つのソースがあります。 related_nameは変更しないでください。

2)ActiveTicketsテーブルとTicketsテーブルの両方にプロキシモデルが継承されています。明らかに

 class CityTickets(Tickets): 

      class Meta: 
      proxy = True 


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

、私はコピー&ペーストチケットのフィールドのすべてを(多くがある)、それはそれを行うための正しい方法ではありませんでした。抽象継承とミックスイン(TicketsとActiveTicketsの両方によって継承された別のクラスのフィールドを定義する)を使用しようとしました。

抽象継承に関する1つの問題は、ForeignKeyフィールド(parent)が重複しており、related_nameが同じであるために問題を引き起こしていることです。一般的に、私の試みは私のユニットテストと機能テストに失敗しました。

ここではエレガントなアプローチは何ですか? 2つの別個のMySQLテーブルを作成し、複数のマネージャ(およびdbルータ)を持つ単一のモデルを使用することについて考えるべきでしょうか?それは妥当ですか?

答えて

2

たぶんこのことができます:

class Base(models.Model): 
    m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related") 

    class Meta: 
     abstract = True 

https://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name

+0

ねえウィリアムは、私は全体的に、私の質問に答えることをわからないんだけど、それは素晴らしいリンクです。以前はDjangoのドキュメントの一部を見たことがなかった。ありがとう! – Ben

関連する問題