unique_together外键对象属性

时间:2010-08-31 17:04:12

标签: django django-models

我有两个型号:Common和ARecord。 ARecord与Common有ForeignKey关系。我想确保ARecord与ARecord和Common的项目组合是独一无二的。

class Common(models.Model):
    NAIC_number = models.CharField(max_length=5)
    file_location_state = models.CharField(max_length=2)
    file_location_code = models.CharField(max_length=2)

class ARecord(models.Model):
    common = models.ForeignKey(Common)
    coverage_code = models.CharField(max_length=6)
    record_type = models.CharField(max_length=1)

    class Meta:
        unique_together = ('coverage_code', 'common__NAIC_number')

但是,当我尝试通过通常的双下划线访问外键对象属性时,我得到模型验证错误。

`arecord.arecord: "unique_together" refers to common__NAIC_number, a field that doesn't exist. Check your syntax.`

这似乎应该是可能的,并且有一个稍微不同的问题被问到 it is ,但也许我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:2)

这对我没有意义。 documentation因此定义unique_together

  

这是一系列字段列表,这些字段在一起考虑时必须是唯一的。它在Django管理员中使用,在数据库级别强制执行(即,相应的UNIQUE语句包含在CREATE TABLE语句中)。

(强调补充)

我不知道如何在这种情况下在数据库级别添加UNIQUE语句(使用当前表中的一列和通过外键访问的另一个表中的另一列)。如果我错了,我希望那些了解数据库的人会纠正我。

答案 1 :(得分:2)

正如Manoj所暗示的那样,你不能用unique_together来做这件事,因为这是一个数据库约束,你想要的东西不能用数据库约束来完成。

相反,您希望以编程方式执行此操作,可能是通过model validation,这将确保不会创建违反约束的实例。