Если у вас есть два внешних ключа в Django, указывающие на одну и ту же модель в форме администратора, вы можете столкнуться с ошибкой администратора. Вот несколько способов решения этой проблемы:
- Используйте параметр
связанное_имя
. При определении полей внешнего ключа обязательно укажите уникальныйсвязанное_имя
для каждого поля, указывающего на одну и ту же модель. Например:
class MyModel(models.Model):
first_field = models.ForeignKey(OtherModel, related_name='first_field')
second_field = models.ForeignKey(OtherModel, related_name='second_field')
- Укажите параметр
limit_choices_to
. Вы можете ограничить выбор для каждого поля внешнего ключа, используя параметрlimit_choices_to
. Это гарантирует, что каждое поле указывает на определенное подмножество экземпляров связанной модели. Например:
class MyModel(models.Model):
first_field = models.ForeignKey(OtherModel, limit_choices_to={'some_field': 'some_value'})
second_field = models.ForeignKey(OtherModel, limit_choices_to={'another_field': 'another_value'})
- Переопределить метод
formfield_for_foreignkey
. В классе администратора вы можете переопределить методformfield_for_foreignkey
, чтобы настроить поле формы для внешнего ключа. Это позволяет вам предоставлять разные фильтры набора запросов для каждого поля. Вот пример:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, kwargs):
if db_field.name == 'first_field':
kwargs['queryset'] = OtherModel.objects.filter(some_field='some_value')
elif db_field.name == 'second_field':
kwargs['queryset'] = OtherModel.objects.filter(another_field='another_value')
return super().formfield_for_foreignkey(db_field, request, kwargs)
Реализовав один из этих методов, вы сможете устранить ошибку при использовании двух внешних ключей для одной и той же модели в администраторе Django.