繁体   English   中英

Django model 没有主要和唯一字段

[英]Django model without primary and unique field

我有一个数据库表:

  url_id( INT(11) )  |   monitor_id( (INT(11) )
 --------------------+--------------------------
        1            |         1
        1            |         2
        1            |         3
        2            |         2

等等。 url_idmonitor_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM