OneToOneField, уникальность и наследование в Django

Я хотел бы иметь отношения между моделью User и одной из различных (но связанных) моделей, но это должно быть только с одной из доступных моделей, например, различные виды подписок, но у пользователя может быть только одна связанная.

Я знаю, что могу решить эту проблему с помощью множества пользовательских проверок, но я хочу знать, есть ли рекомендуемое или простое решение.

Если я использую наследование и определяю базовую модель, давайте поместим "BaseModel" с полем OneToOneField для User, и от этой модели они унаследуют несколько: ModelA и ModelB,

class ModelBase(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="model_base")

class Meta:
    abstract = True


class ModelA(ModelBase):
    pass


class ModelB(ModelBase):
    pass

Django выдает эту ошибку

Reverse accessor 'User.model_base' for 'models.ModelA.user' clashes with reverse accessor for 'models.ModelB.user'.

Я понимаю, что определение другого related_name в субмоделях решает эту проблему, но это не сохраняет условие "уникальности".

Каким было бы лучшее решение для этой проблемы? Могу ли я избежать использования GenericForeignKeys?

Спасибо!

Вернуться на верх