2

我不知道如何用初始数据填充 django ChoiceField。最好希望在视图中进行,因为它会根据我传递给视图的参数而改变。

视图.py

def index(request):
    init_ingredients = [{'food':'Candy','amt':12,'units':'cup'},{'food':'Bacon','amt':9,'units':'cup'}]
    IngredientsFormSet = formset_factory(IngredientLineForm, can_delete=True)
    if request.method == 'POST':
        formset = IngredientsFormSet(request.POST, request.FILES)
        ...
    else:
        formset = IngredientsFormSet(initial=init_ingredients)

'food' 字段和 'amt' 字段填充,但 'units' 字段 - 这是一个 html Select 输入不填充初始值。我也需要定义选择吗?并且初始值是其中之一吗?

表格.py

class IngredientLineForm(forms.Form):
    food = forms.CharField(widget=forms.TextInput(attrs={'class':'foods form-control'})) #class = food
    units = forms.ChoiceField(widget=forms.Select(attrs={'class':'units form-control'}))
    amt = forms.CharField(widget=forms.NumberInput(attrs={'class':'amt form-control'}))
4

1 回答 1

0

我用:

    类 netadminGlobalFormView(LoginRequiredMixin, FormView):
        模型 = 网络信息
        form_class = netInfoForm

        def get_initial(self):
            初始=超级(netadminGlobalFormView,自我).get_initial()
            初始['eth0_ip'] = self.model_instance.get_eth0_ip_stdout
            初始['config_type'] = 'DHCP'
            返回初始

注意这里:

    初始['config_type'] = 'DHCP'

我从选择中设置了一个值:

    # value 显示值
    配置类型=(
       ('DHCP', '自动 (DHCP)'),
       ('手动','静态(手动)')
    )

表单定义包括以下内容:

    类 netInfoForm(ModelForm):

        eth0_ip=forms.GenericIPAddressField(protocol='IPv4',
            小部件=forms.TextInput(
            attrs={'placeholder': 'xxx.xxx.xxx.xxx'}),
            max_length=IPv4_addr_chars,
            标签=IPv4_addr_html_label,
            help_text='必填:即 192.168.111.12',
            必需=真
    # ,error_messages={'required': '请输入IPv4地址,即192.168.111.12'}
        )

        config_type = forms.ChoiceField(choices=config_types, widget=forms.RadioSelect())
                                        #,initial='手动')

在模型中:

    类网络信息(模型。模型):
        eth0_ip = models.CharField(max_length = IPv4_addr_chars,空白=True,null=False,默认=get_eth0_ip_stdout)
        config_type = models.CharField(max_length=6, blank=False, null=False, default="DHCP")

W/o 在上面的示例中使用初始值“DHCP”或“MANUAL”,选择开始时未选中。另请注意,可以在表单类中设置初始值(如上所述)。

所以,正是你的问题:

1> 我也需要定义选择吗?

是的,选择应该在模型中定义。

2> 并且初始值是其中之一?

是的,选择的初始值必须与表单和模型的选择定义相匹配。

至少在 django 2.0 中是这样。

关于问题 1) - 我不能声称没有能力以其他方式初始化选择,但对于我对问题 2) 的示例答案来说就是这样 - 不匹配的值被忽略(没有引发异常)。

于 2018-08-09T23:13:13.087 回答