2015-12-08 80 views
0

我在django模型中存在關係的概念問題。Django模型:多個外鍵或一對一的字段

讓我們來看看我的例子:

我有這個表/班到models.py:

class PacketEventsInformation(models.Model): 

ID_IP_Source = models.<Relationship>(Ips, on_delete=models.CASCADE) 
ID_IP_Dest = models.<Relationship>(Ips, on_delete=models.CASCADE) 
ID_Source_Port = models.<Relationship>(Ports, on_delete=models.CASCADE) 
ID_Dest_Port = models.<Relationship>(Ports, on_delete=models.CASCADE) 
Protocol = models.CharField(max_length=20) 
ID_Source_MAC = models.<Relationship>(Macs, on_delete=models.CASCADE) 
ID_Dest_MAC = models.<Relationship>(Macs, on_delete=models.CASCADE) 
RAW_Info = models.TextField() 
TAG = models.ForeignKey(Tags, on_delete=models.CASCADE) 

def __str__(self): 
    return '%s' % self.id 

在這一點上,我定義的另一個表的所有我的ID字段和ID字段之間的關係/類(Pkey)像ForeignKey。

好吧,如果我執行遷移到我的終端,我得到這個:

./manage.py migrate 
app.PacketEventsInformation.ID_Dest_MAC: (fields.E304) Reverse accessor for 'PacketEventsInformation.ID_Dest_MAC' clashes with reverse accessor for 'PacketEventsInformation.ID_Source_MAC'. 
...... 

我明白多對多,OneToOne和一對多(外鍵)的定義,但我不知道爲什麼不能做這個。也許,答案可能是你的答案創建中間表與Fkeys或把該ID之間的OneToOne關係....

感謝=)

PD:

ID_IP_Source /目的地可以是相同的

ID_Source/Dest_Port可以相同

ID_Source/Dest_MAC可以相同

回答

2

在Django你的時候有多個外鍵在同一型號的指點下,你需要使用related_name來區分它們:

ID_IP_Source = models.<Relationship>(Ips, on_delete=models.CASCADE, related_name="id_ip_source") 
ID_IP_Dest = models.<Relationship>(Ips, on_delete=models.CASCADE, related_name="id_ip_dest") 
+0

其實,中間表只用於ManyToManyField。不適用於ForeignKey或OneToOneField。 –

+0

@JoeyWilhelm是的,我搞砸了這個概念。更新了答案。 –

+0

在16秒內!大! =)非常感謝你。但另一個問題是,在執行遷移後,我不會將中間表看成數據庫。那麼,Django使用它內部或如何?如果你知道如何:P – MGautier

相關問題