Для связывания модели через ForeignKey только с определенными объектами таблицы в Django можно использовать параметр limit_choices_to
.
Параметр limit_choices_to
позволяет ограничить список выбора объектов-связей при создании поля ForeignKey. Он принимает словарь, в котором можно указать условия для выбора объектов.
Допустим, у вас есть две модели Model1
и Model2
, и вы хотите установить ForeignKey из Model2
на Model1
, но связываться только с определенными объектами Model1
по условию.
Например, предположим, что у Model1
есть поле status
с выбором "active" и "inactive", а вы хотите, чтобы ForeignKey в Model2
связывался только с активными объектами Model1
. Для этого вы можете использовать параметр limit_choices_to
следующим образом:
from django.db import models class Model1(models.Model): STATUS_CHOICES = ( ('active', 'Active'), ('inactive', 'Inactive'), ) status = models.CharField(max_length=10, choices=STATUS_CHOICES) class Model2(models.Model): model1 = models.ForeignKey(Model1, on_delete=models.CASCADE, limit_choices_to={'status': 'active'})
В результате, при создании объекта Model2
в админке Django или при использовании формы, будет отображаться только список активных объектов из Model1
при выборе связи через ForeignKey.
Нужно отметить, что limit_choices_to
применяется только для отображения и выбора объектов связи, и он не накладывает ограничений на саму связь или сохранение объекта в базе данных. Если вы попытаетесь сохранить объект Model2
с связью с объектом Model1
, не соответствующему указанным условиям в limit_choices_to
, вам будет выдано исключение ValidationError
. Если требуется дополнительная проверка, вы также можете использовать сигналы Django или переопределить метод clean()
модели Model2
для дополнительной валидации.