[英]Django model without primary and unique field
我有一个数据库表:
url_id( INT(11) ) | monitor_id( (INT(11) )
--------------------+--------------------------
1 | 1
1 | 2
1 | 3
2 | 2
等等。 url_id
和monitor_id
字段都不是唯一的,不仅如此,它们是其他表(表urls
和表monitors
)的外键。 所以我不能改变数据库结构。 在我的 Django 模型文件中,我为此表创建了一个 model class:
class MonitorForUrl(models.Model):
url = models.ForeignKey(Url, primary_key=True)
monitor = models.ForeignKey(Monitor)
class Meta:
db_table = 'monitors_for_url'
我将primary_key
参数设置为 true,因为如果我不设置自己的主键字段,Django 会为主键创建默认的*model_name*_id
字段。 数据库中没有这样的字段,所以我将primary_key
设置为 true。 通过这种方式,我无法创建一些具有相似url_id
值的行,因为它是主键。 我可以告诉 Django 在不设置primary_key
选项的情况下不要创建默认主键字段,或者您可以建议我一些其他方法来解决我的问题吗?
不要为此创建模型。 而是在Url和Monitor模型中添加多对多关系 。
然后,Django将为您维护此中间表。
您可能想制作复合主键,但 django 不支持它: https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys
你可以做的是让它创建 id 字段,但也像这样添加唯一约束:
class MonitorForUrl(models.Model):
url = models.ForeignKey(Url, on_delete=models.CASCADE)
monitor = models.ForeignKey(Monitor, on_delete=models.CASCADE)
class Meta:
db_table = 'monitors_for_url'
constraints = [
models.UniqueConstraint(
fields=['url', 'monitor']
name='unique_url_monitor'
)
]
这两个字段都不会是唯一的,但字段的组合会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.