2013-01-19 121 views
0

好吧,這可能是其他人很容易解決,但我真的很困惑如何解決這個問題。django模型幫助涉及m2m和foreignkey

所以,首先,我有一個模型A有多個字段與特定表具有多對多關係。因此,例如

class A(models.Model): 
    field1 = models.ManyToMany('field1Collection') 
    field2 = models.ManyToMany(field2Collection') 

class field1Collection(models.Model): 
    description = models.TextField() 

class field2Collection(models.Model): 
    description = models.TextFIeld() 

無論如何,這是我想要完成的。我需要編寫另一個可以保持排名系統的模型。因此,例如,我想創建一個記錄,我可以定義

我有隊伍的x個(3例):

  1. field1Collection對象3
  2. field2Collection對象6
  3. field1Collection對象2

所以我基本上想要能夠從我的field1Collection和field2Collection表中選擇對象併爲它們分配等級。我試圖想出使用foreignkeys和m2m字段的方案,但它們都出錯了,因爲模型需要知道我需要引用哪些collection集合的時間「提前」。這有很多意義嗎?誰能幫忙?

回答

0

就可以解決這個使用GenericForeignKey關係

from django.db import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 

class RankItem(models.Model): 
    rank = models.IntegerField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    def __unicode__(self): 
     return self.rank 

正常F​​oreignKey的只能用「點」另外一個模式,這意味着,如果RankItem模型中使用一個ForeignKey那就要選一個且只有一個模型來存儲標籤。 contenttypes應用程序提供了一種專門的字段類型,它可以解決這個問題,並且可以與任何模型建立關係

0

你需要那個field1Collection和filed2Collection有一個共同的祖先類,你可以引用一個foreignKey。關於繼承請參閱django文檔。

+0

您推薦什麼樣的繼承? – asaji