【问题标题】:Django Models - 'Pcaps.uuid' must set unique=True because it is referenced by a foreign keyDjango 模型 - 'Pcaps.uuid' 必须设置 unique=True 因为它被外键引用
【发布时间】:2018-06-06 11:36:55
【问题描述】:

本质上,我正在尝试创建一些填充了 pcaps 属性的表。我收到一个很奇怪的错误。这是模型类中的代码:

class Pcaps(models.Model):
     uuid = models.CharField(max_length=50)
     filename = models.CharField(max_length=200, default='')
     datetime = models.DateTimeField(default=datetime.now, blank=True)
     filehash = models.ForeignKey(Malwares, to_field="filehash", 
 db_column="filehash")

class PcapsIps(models.Model):
    domainname = models.CharField(max_length=100)
    ip = models.CharField(max_length=100)
    uuid = models.ForeignKey(Pcaps, to_field="uuid", db_column="uuid")

class PcapsPorts(models.Model):
   number = models.CharField(max_length=100)
   uuid = models.ForeignKey(Pcaps, to_field="uuid", db_column="uuid")

有问题的错误如下:

错误:

analyser.PcapsIps.uuid: (fields.E311) 'Pcaps.uuid' must set unique=True 
because it is referenced by a foreign key.
analyser.PcapsPorts.uuid: (fields.E311) 'Pcaps.uuid' must set unique=True because it is referenced by a foreign key.

【问题讨论】:

  • 为什么奇怪?错误很明显,外键必须是唯一的。

标签: sql django python-3.x django-models


【解决方案1】:

您必须了解外键在幕后的工作原理,即在您使用的任何数据库系统中。外键是一个表(对应于 Django 模型)中的一个字段(或字段集合),它唯一地标识另一个(或同一个)表的一行。通常,这是由主键完成的,因为它保证是唯一的。如果您有理由这样做,您可以设置to_field 以引用另一个表/模型中的不同行,但该字段也必须是唯一的。因此你需要:

uuid = models.CharField(unique=True, max_length=50)

编辑:哦,顺便说一句,如果您使用的是 Django 1.8 或更高版本,它现在有一个UUIDField。见here

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 2011-05-25
    • 2010-10-18
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多