【问题标题】:Dynamic MultiValueField in DjangoDjango中的动态多值字段
【发布时间】:2013-09-20 18:06:06
【问题描述】:

我正在尝试基于动态创建其字段的 MultiValueField 创建自定义小部件。大致如下:

class MyField(MultiValueField):
    def __init__(self, my_param, *args, **kwargs):
        fields = []
        for field in my_param.all():
            fields.append(forms.ChoiceField(
              widget=forms.Select(attrs={'class':'some_class'})))

    super(MyField, self).__init__(
        self, fields=tuple(fields), *args, **kwargs)

还有一个使用这样的字段的表单:

class MyForm(forms.Form):
    multi_field = MyField()
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['multi_field'].my_param = self.initial['car_types'].another

我此刻不知何故被困住了。当仅从 MyForm 的构造函数(例如 self.initial['car_types'].another)中知道参数时,如何将参数(例如 my_param)传递给 MyField 的 init() 方法?

【问题讨论】:

    标签: django django-forms django-widget


    【解决方案1】:

    您需要在__init__ 中实例化您的字段:

    class MyForm(forms.Form):
        def __init__(self, *args, **kwargs):
            super(MyForm, self).__init__(*args, **kwargs)
            self.fields['multi_field'] = MyField(self.initial['car_types'].another)
    

    【讨论】:

    • ... 但是如果出现 FieldError: Unknown field(s) 怎么办,因为我们的 Model 和 MyForm 不知道这个“multi_field”——在 ModelAdmin 的字段集中给出的自定义字段,需要在 MyForm 类中定义。
    猜你喜欢
    • 2016-04-06
    • 2012-05-29
    • 2019-08-12
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2011-12-21
    • 2015-11-25
    • 2017-09-11
    相关资源
    最近更新 更多