Устранение ошибки администратора Django с двумя внешними ключами одной модели

Если у вас есть два внешних ключа в Django, указывающие на одну и ту же модель в форме администратора, вы можете столкнуться с ошибкой администратора. Вот несколько способов решения этой проблемы:

  1. Используйте параметр связанное_имя. При определении полей внешнего ключа обязательно укажите уникальный связанное_имядля каждого поля, указывающего на одну и ту же модель. Например:
class MyModel(models.Model):
    first_field = models.ForeignKey(OtherModel, related_name='first_field')
    second_field = models.ForeignKey(OtherModel, related_name='second_field')
  1. Укажите параметр 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'})
  1. Переопределить метод 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.