Django - Как сделать так, чтобы ограничение UNIQUE не применялось к наследуемым моделям?

Есть PlainModel, у которого есть атрибуты name, color - и slug, который должен быть уникальным. Я хочу создать свою собственную версию, ExtendedModel, которая также имеет size. Итак, я сделал модель наследуемой от PlainModel:

class ExtendedModel(PlainModel):
    size = models.IntegerField(...)

Однако я столкнулся с проблемой - из-за того, как работает наследование моделей в Django, таблица базы данных ExtendedModel имеет только два столбца - один для size и один для указателя на исходную таблицу PlainModel. Это означает, что уникальное ограничение на slug применяется для обеих моделей, и не может быть ExtendedModel с тем же slug, что и уже существующий PlainModel. Я не хочу такого поведения, slug будут появляться только в контексте каждой модели отдельно (например, /products/{slug} и /products/extended/{extended_slug}), поэтому нет причин обеспечивать уникальность для обеих моделей. Можно ли сделать так, чтобы ограничение применялось только для каждой модели соответственно?

Очевидным способом было бы сделать таблицы полностью отдельными, что, однако, Django, похоже, не поддерживает. PlainModel должна быть "Абстрактной моделью", которую я не могу контролировать. (PlainModel определяется во внешней библиотеке.) Другим способом было бы ослабить уникальное ограничение и проверять его в моем собственном коде - что не кажется отличным решением, я бы предпочел, чтобы оно все еще обеспечивалось на уровне базы данных. Наконец, я мог бы просто скопировать соответствующие атрибуты из PlainModel в ExtendedModel, но тогда я теряю преимущества "наследования" (т.е. обеспечение того, что модели имеют некоторый набор общих атрибутов).

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