11

我正在尝试根据父表单/实例的属性在内联上设置选择字段的默认值。

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

def get_form(self, ***):
   if self.parent.instance && self.parent.instance.field_x == "y":
      self.field_name.choices = ...

我在 Google 上搜索过,但似乎找不到任何关于从内联中引用父表单的信息。

也许我必须以相反的方式执行此操作,并从父级内部访问内联?

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

以上任何一种可能吗?

4

1 回答 1

1

您可以使用 get_form_kwargs 方法并将选择传递给 form 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

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

于 2014-08-08T14:26:12.650 回答