Фильтр внешних ключей в админке django

Я хотел бы предварительно отфильтровать поле внешнего ключа на моей странице администратора django.

Вот мои модели:

class Modalite(TimeStampedModel):
    class Meta:
        verbose_name = _(u"Modalite")
        verbose_name_plural = _(u"Modalites")

    protocole = models.ForeignKey(Protocole, related_name='modalite_protocole',
                                  on_delete=models.PROTECT)
    code = models.CharField(max_length=50)
    station = models.ForeignKey(Station, related_name="modalite_station",
                                on_delete=models.PROTECT, null=True, blank=True)

class Protocole(TimeStampedModel):
    class Meta:
        verbose_name = _(u"Protocole")
        verbose_name_plural = _(u"Protocoles")

    code = models.CharField(max_length=50)
    repetition = models.IntegerField()
    stations = models.ManyToManyField(Station, related_name="protocole_station")
    file = models.FileField()

class Station(TimeStampedModel):
    class Meta:
        verbose_name = _(u"Station")
        verbose_name_plural = _(u"Stations")

    nom = models.CharField(max_length=50)

Так "модалит" я связал с "протоколом". У "protocole" может быть несколько "station", но у "modalite" может быть только одна "station". Я хотел бы в редакции экземпляра администратора "modalite", выбрать только "station" внешний ключ, который уже связан с ассоциированным "protocole".

Другими словами, если модель "станция" содержит следующие экземпляры [A,B,C]; а "протокол" связан только с [A,B]. Я хочу иметь возможность в рамках "модалита" выбирать только в [A,B].

Я предполагаю, что могу сделать это с помощью "formfield_for_foreignkey", но я не знаю, как обратиться к конкретному экземпляру. Вот мой admin.py на данный момент:

@admin.register(Modalite)
class ModaliteAdmin(admin.ModelAdmin):
    # form = ModaliteAdminForm
    list_display = ('code', 'station', 'protocole')
    list_filter = ('code', 'station', 'protocole')

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "station":
            kwargs["queryset"] = Station.objects.filter(nom__in=??????)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

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