Django GenericRelation для update_or_create - PullRequest
1 голос
/ 02 июля 2019

У меня проблема с использованием GenericRelation с update_or_create. У меня есть следующие модели:

class LockCode(TimeStampedModel):
    context_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    context_id = models.PositiveIntegerField()
    context = GenericForeignKey('context_type', 'context_id')


class Mission(DirtyFieldsMixin, models.Model):
    lock_codes = GenericRelation(
        LockCode,
        content_type_field='context_type',
        object_id_field='context_id',
        related_query_name='mission'
    )

Я пытаюсь создать или обновить LockCode, используя миссию в качестве ключа:

mission = ....
LockCode.objects.update_or_create(
            context=mission,
            defaults={
             #some other columns there
            }

И у меня есть FieldError: Field 'context' does not generate an automatic reverse relation and therefore cannot be used for reverse querying. If it is a GenericForeignKey, consider adding a GenericRelation.

Это работает, когда я явно использую context_id и context_type:

LockCode.objects.update_or_create(
            context_id=mission.pk,
            context_type=ContentType.objects.get_for_model(Mission),
            defaults={
             #some other columns there
            }

Что-то не так в моей конфигурации? Или это единственный способ использовать GenericForeignKey для update_or_create?

1 Ответ

2 голосов
/ 02 июля 2019

Нашел решение.Просто нужно использовать mission вместо context в update_or_create:

mission = ....
LockCode.objects.update_or_create(
            mission=mission,
            defaults={
             #some other columns there
            }
...