Как фильтровать варианты 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. Как я могу этого добиться?

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