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
, но тогда я теряю преимущества "наследования" (т.е. обеспечение того, что модели имеют некоторый набор общих атрибутов).