Для создания общего управления версиями для моих моделей я создал модель Version
:
class Version(models.Model):
version_number = models.IntegerField()
...
и абстрактные модели VersionedModel
class VersionedModel(models.Model):
...
versions = models.ManyToManyField(Version, related_name="%(app_label)s_%(class)s")
class Meta:
abstract = True
все работает, но я быхотел бы, чтобы база данных проверяла, что каждая версия назначена одному и только одному объекту.
Что я могу придумать, так это изменить поле versions
и использовать through
для создания и промежуточной таблицы, где я мог бы затем использовать уникальный индекс для version_id, но я только вернулся к первоначальной проблемесоздание поля ForeingKey
для абстрактной модели.
Мне не нравится использовать GenericForeignKey
, поскольку они создают всевозможные головные боли при работе с графеном.Я задавался вопросом, есть ли способ смоделировать это по-другому, или использовать какое-то ограничение, о котором я не знаю, чтобы база данных могла обеспечить полноту и уникальность самостоятельно.