Django - 基于父实例的内联字段值

Han*_*pan 11 django django-forms django-admin

我试图根据父窗体/实例的属性在内联中设置选择字段的默认值.

在伪代码中,它看起来像:

def get_form(self, ***):
   if self.parent.instance && self.parent.instance.field_x == "y":
      self.field_name.choices = ...
Run Code Online (Sandbox Code Playgroud)

我在Google上搜索过,但似乎无法找到任何有关在内联中引用父表单的信息.

也许我必须以相反的方式做到这一点,并从父母内部访问内联?

def get_form(self, ***):
   if self.instance:
      for inline in self.inlines:
          if instanceof(inline, MyInline):
             inline.field_name.choices = ...
Run Code Online (Sandbox Code Playgroud)

以上任何一种都可能吗?

nkh*_*eys 1

您可以使用 get_form_kwargs 方法并将选择传递到表单 init 方法中,如下所示

class Form(forms.Form):
    def __init__(self, *args, **kwargs):
        choices = kwargs.pop('choices', None)
        super(Form, self).__init__(*args, **kwargs)
        form.field.choices = choices

class FormView(generic.FormView):

    def get_form_kwargs(self, *args, **kwargs)
        kwargs = super(FormView, self).get_form_kwargs()
        kwargs['choices'] = choices
        return kwargs
Run Code Online (Sandbox Code Playgroud)

您可以在 get_form_kwargs 方法中检查父对象并传递不同的选择(我认为)