Django 模型:多个外键或一对一字段
Django Model: Multiple foreign keys or one to one field
我对 Django 模型中的关系概念有疑问。
让我们看看我的例子:
我把这个 table/class 变成 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字段和另一个tables/classes(Pkey)的ID字段之间的关系,例如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'.
......
我明白ManyToMany,OneToOne和OnetoMany(外键)的定义,但我不知道为什么不能这样做。也许答案可以是使用该 Fkey 创建中间表或在该 ID 之间设置 OneToOne 关系....
感谢您的回答=)
PD:
ID_IP_Source/Dest可以一样
ID_Source/Dest_Port可以一样
ID_Source/Dest_MAC可以一样
在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")
我对 Django 模型中的关系概念有疑问。
让我们看看我的例子:
我把这个 table/class 变成 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字段和另一个tables/classes(Pkey)的ID字段之间的关系,例如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'.
......
我明白ManyToMany,OneToOne和OnetoMany(外键)的定义,但我不知道为什么不能这样做。也许答案可以是使用该 Fkey 创建中间表或在该 ID 之间设置 OneToOne 关系....
感谢您的回答=)
PD:
ID_IP_Source/Dest可以一样
ID_Source/Dest_Port可以一样
ID_Source/Dest_MAC可以一样
在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")