dip*_*pl0 1 sql django django-models python-3.x
本质上,我试图创建一些填充了 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")
Run Code Online (Sandbox Code Playgroud)
有问题的错误如下:
错误:
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.
Run Code Online (Sandbox Code Playgroud)
您必须了解外键的工作原理,即在您使用的任何数据库系统中。外键是一个表(对应于 Django 模型)中的一个字段(或字段的集合),它唯一地标识另一个(或同一个)表的一行。通常,这是由主键完成的,因为它保证是唯一的。如果您有理由这样做,您可以设置to_field引用其他表/模型中的不同行,但该字段也必须是唯一的。因此你需要:
uuid = models.CharField(unique=True, max_length=50)
Run Code Online (Sandbox Code Playgroud)
编辑:哦,顺便说一句,如果您使用的是 Django 1.8 或更高版本,它现在有一个UUIDField. 看这里
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |