Как добавить unique_to вместе с универсальным внешним ключом в Django

Я не уверен, что делаю это неправильно или есть какая-то проблема при обработке уникальных ограничений при работе с GenericForeign Relations в Django.

Когда я пытаюсь сохранить объект (например, в Admin), я получаю уникальную ошибку ограничения (поднимает 500) из базы данных, но не ValidationError в Admin (UI).

Ниже мой фрагмент кода,

У меня есть одна общая модель отношений, как показано ниже,

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.

Что-то не так с тем, как я это реализовал? или что-то не предназначено для такого использования?

Любая помощь очень ценится. Спасибо

1 ответ

Вы не получите ValidationError здесь, потому что он не может быть проверен без дополнительного запроса, и django не создаст этот запрос сам по себе. Если вам нужно это подтверждение, вы должны написать его самостоятельно.

Другие вопросы по тегам