Для проверки уникальности двух полей из разных моделей в Django можно использовать комбинацию двух подходов: сначала создать уникальный индекс в базе данных, затем добавить дополнительную логику проверки на уровне Django моделей.
1. Уникальный индекс в базе данных:
Для создания уникального индекса для двух полей из разных моделей в Django, необходимо сначала создать миграцию. Для этого можно воспользоваться командой:
python manage.py makemigrations app_name
Затем нужно добавить индекс в созданной миграции. Например, если у нас есть модели ModelA
и ModelB
с полями field_a
и field_b
, для создания уникального индекса нужно добавить следующий код в миграцию:
migrations.AlterUniqueTogether( name='modela', unique_together={('field_a', 'field_b')}, ),
2. Дополнительная логика проверки в Django моделях:
Чтобы убедиться, что уникальность полей также проверяется на уровне Django моделей, можно воспользоваться хуками save()
или clean()
и добавить кастомную логику проверки. Например:
from django.core.exceptions import ValidationError class ModelA(models.Model): field_a = models.CharField(max_length=100) field_b = models.CharField(max_length=100) def clean(self): super().clean() if ModelB.objects.filter(field_c=self.field_a, field_d=self.field_b).exists(): raise ValidationError('Combination of field_a and field_b already exists in ModelB.')
Таким образом, используя уникальный индекс в базе данных в сочетании с дополнительной логикой проверки в Django моделях, можно гарантировать уникальность комбинации полей из разных моделей.