Django unique_一起不起作用:“指不存在的字段”

2024-07-01 07:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中创建模型时,我需要使两个整数字段的组合唯一:

class example(models.Model):
    lenght = models.PositiveSmallIntegerField
    position = models.PositiveSmallIntegerField
    otherfield = models.ForeignKey('onetable')
    otherfield2 = models.ForeignKey('anothertable')

    class Meta:
        unique_together = (("lenght", "position"),)

因此,当我同步数据库时,会收到以下错误消息:

执行管理.py同步数据库 系统检查错误:系统检查发现了一些问题:

^{pr2}$

我发现如果将字段类型更改为“charfield”,则不会收到任何错误消息:

class example(models.Model):
    lenght = models.CharField(max_length=8)
    position = models.CharField(max_length=8)
    otherfield = models.ForeignKey('onetable')
    otherfield2 = models.ForeignKey('anothertable')

    class Meta:
        unique_together = (("lenght", "position"),)

为什么我不能使整数字段的组合唯一?在


Tags: modelmodelsexample错误position整数metaclass
1条回答
网友
1楼 · 发布于 2024-07-01 07:59:57

因为您没有声明(实例化)整型字段(您只是引用了它们的类):

class example(models.Model):
    lenght = models.PositiveSmallIntegerField
    position = models.PositiveSmallIntegerField

lengthposition不是字段实例,而是字段类。尝试将它们实例化为表中实际存在的字段:

^{pr2}$

在元类中,Django检测并枚举字段实例(即通过运行isinstance(v, Field))并创建它们的列。您可以在类中声明任何值(方法是属性;可能您的类具有自定义异常或choices=参数的常量值,…),但仅枚举字段实例。这适用于字段类:Django没有特别对待它们:也许您将一个自定义的Field类声明为模型中的内部类(只在模型中使用),并且您不会期望它变成一个字段。。。所以这就是Django不将对字段类的引用转换为对字段实例的引用的原因。在

你必须明确。也许你忘了括号。在

相关问题 更多 >

    热门问题