Django表单处理动态字段标签

2024-09-27 17:53:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个表单,它根据传入的参数和存储在数据库中的权重类动态构建。这一切都很好(注意:它不是一个ModelForm,只是一个Form)。在

现在我正在尝试保存用户的响应。如何迭代他们提交的数据以便保存?在

这里有一个类似的问题:Processing dynamic MultipleChoiceField in django

但我不能让它为我工作,因为我的情况稍有不同。我想查看用户在表单中选择的选项按钮的标签,并比较该值,因为它将与数据库中已存储的权重类的值相匹配。表单包含“first_name”和“last_name”等字段,我用于动态生成权重类的代码如下:

def __init__(self, event, *args, **kwargs):
    super(EntryForm, self).__init__(*args, **kwargs)

    groups = ClassGroup.objects.all()
    weight_classes = ClassOrder.objects.filter(event=event).order_by('weight')
    current_group = regclasses[0].competition_class.class_group

    for weight_class in weight_classes.all():
        self.fields['%s' % weight_class.competition_class.class_group.group_name] = forms.ChoiceField(choices=[ (o.id, o.class_name + ": " + o.class_info) for o in weight_class.competition_class.class_group.classes_in_group.all()], widget=forms.RadioSelect(), label=weight_class.competition_class.class_group.group_name, required=False)

这给我的感觉是:

男子重量级别

  • 男子轻量级
  • 男子中量级
  • 重量级拳手
  • 男子重量
  • 男子超重

除了不是动态生成的表单字段。在

它们都是一个无线电选择组的一部分。我尝试使用以下代码处理表单:

^{pr2}$

其思想是for循环应该迭代表单中的字段,并检查字段的标签是否与数据库中的权重类相同。如果数据库中的字段和权重类匹配,则会创建一个新条目,其中包含运动员、事件和运动员在表单中选择的权重类。当代码运行时,我得到错误

无法分配“[]”:入门级运动员“”必须是“类”实例。

我的猜测是'field'变量没有引用option按钮的标签。如何让表单处理动态生成的weight类的名称?在


Tags: nameinselfevent数据库表单group动态
2条回答
Classes.objects.filter(class_name=field)

返回一个queryset,但您需要一个Classes实例。在

^{pr2}$

会的。在

我在前面已经通过创建一个数组来完成这个任务,这个数组使用动态生成的字段附加到表单上,然后对其进行迭代。在

或者你可以把对象.get(…)在try/except块中:

try:
    Classes.objects.get(class_name=field)
except:
    pass
else:
    newentry = Entry(
        athlete = athlete,
        event = event,
        athlete_class = Classes.objects.filter(class_name=field)
        )

if语句不起作用的原因是下面的块没有正确缩进。这也可以(注意计数后的括号):

^{pr2}$

相关问题 更多 >

    热门问题