Как фильтровать варианты foreingkey в Django Admin?

У меня есть 3 простые модели:

class Department(models.Model):
name = models.CharField(
    max_length=30
)


class Company(models.Model):
    name = models.CharField(
        max_length=30
    )
    department = models.ManyToManyField(Department)


class Employee(models.Model):
    name = models.CharField(
        max_length=30
    )

    company = models.ForeignKey(Company,
                                on_delete=SET_NULL,
                                null=True,
                                blank=True,
                                )

    department = models.ForeignKey(to=Department,
                                   on_delete=DO_NOTHING)

Я хочу ограничить опции отдела в панели Django Admin только теми, которые связаны с компанией сотрудника. Например:

Факультеты:

HR, DevOpps, WebApps, TVApps

Компании:

Компания_1 с отделами - HR, DevOpps, WebApp

Компания_2 с отделами - HR, DevOpps, TVApps

Добавить сотрудника:

если выбрана компания Company_1, варианты отделов должны быть: HR, DevOpps, WebApp

если выбрана компания_2, то варианты отделов будут такими: HR, DevOpps, TVApps

Похоже, что вы хотите реализовать зависимое выпадение в ваших формах?

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

Я также видел, что этот вопрос хорошо решается в htmx, если вы хотите попробовать. На их странице примеров показана реализация value-select.

Спасибо. Я обязательно воспользуюсь этим. Но мне нужно знать, возможно ли в этой модели ограничить Employee. Я имею в виду, чтобы Employee был недействительным, если Employee.company и Employee.department не связаны друг с другом по какой-либо причине.

Вернуться на верх