3

在 Django 中使用 GenericForeign Relations 时,我不确定我做错了还是在处理唯一约束时出现了一些问题。

当我尝试保存对象时(例如在 Admin 中),我收到唯一约束错误(引发 500)表单数据库,但在 Admin (UI) 上没有 ValidationError。

下面是我的代码片段,

我有一个如下的通用关系模型,

class Targeting(models.Model):

    TARGETING_CHOICES = (
        ('geo', "Geo targeting"),
        ('other', "Other targeting"),
    )

    targeting_type = models.CharField(max_length=64, choices=TARGETING_CHOICES, null=False)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()

    content_object = GenericForeignKey('content_type', 'object_id')

    class Meta:
        unique_together = ('content_type', 'object_id', 'targeting_type')

而我使用它的另一个模型是,

class MyModel(models.Model):
    name = models.CharField(max_length=60, db_index=True)
    targeting = GenericRelation('Targeting')

引发异常:

duplicate key value violates unique constraint "mymodel_targeting_targeting_type_0dff10ee_uniq" DETAIL: Key (targeting_type, content_type_id, object_id)=(geo, 18, 188) already exists.

我实施它的方式有问题吗?或者某些东西不应该像这样使用?

任何形式的帮助都非常感谢。谢谢

4

1 回答 1

0

您不会在此处收到 ValidationError,因为如果没有其他查询就无法验证它,并且 django 不会自行创建该查询。如果您需要进行验证,则需要自己编写。

于 2016-05-03T11:34:55.233 回答