Как фильтровать варианты ForeignKey в инлайн-форме администратора Django (TabularInline)?
У меня есть эти 4 модели:
class Model_A(models.Model):
...
class Model_B(models.Model):
model_a = models.OneToOneField("Model_A", primary_key=True)
model_c_fk = models.ForeignKey("Model_C")
model_d_fk = models.ForeignKey("Model_D")
class Model_C(models.Model):
choice_c = models.CharField()
class Model_D(models.Model):
model_c_fk = models.ForeignKey("Model_C")
choice_d = models.CharField()
В административной форме Model_A я хочу отфильтровать варианты выбора в Model_D на основе выбранного ForeignKey model_c_fk в Model_B_Inline.
class Model_B_Inline(admin.TabularInline):
model = Model_B
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "model_d_fk":
kwargs["queryset"] = Model_D.objects.filter(model_c_fk=1) # Should be model_c_fk="Model_B.model_c_fk"
return super().formfield_for_foreignkey(db_field, request, **kwargs)
@admin.register(Model_A)
class Model_A_Admin(admin.ModelAdmin):
inlines = [Model_B_Inline]
С методом formfield_for_foreignkey работает, если я передаю только id как целое число для тестирования, но я не знаю, как я могу получить доступ к значению выбранного ForeignKey model_c_fk в Model_B. Как я могу этого добиться?