Фильтр внешних ключей в админке 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)