代码之家  ›  专栏  ›  技术社区  ›  trouselife

django forms:一个字段中的不同标记是否可以有多个下拉菜单?

  •  0
  • trouselife  · 技术社区  · 8 年前

    我在表单集中有一个表单,我想在一个字段“tests”下显示多个下拉菜单。我通过在“optgroup”标记中有一个下拉菜单来实现这一点(见下图)。

    我想这样你只能选择一个值。

    然而,是否有可能“嵌套”这些下拉列表?也就是说,它们都在一个字段“tests”下,但是能够有几个带有“tags”的下拉列表,并为每个tag选择结果?或者每个“标签”需要一个字段吗?

    我的表单.py:

    class ReportForm(forms.ModelForm):
    
        summary = forms.CharField(
                    widget=forms.Textarea(attrs={'rows':3, 'cols':70}),
                    label='',
                    required=False)
    
        tests = forms.CharField(widget=forms.HiddenInput())
    
    
        class Meta:
            model = ClinicallyReportedSample
            fields = ('id', 'summary', 'tests', 'hilis_reported')
    
        def __init__(self, *args, **kwargs):
            json_data = kwargs.pop('json_data', None)
            super(ReportForm, self).__init__(*args, **kwargs)
    
            crs_obj = self.instance
    
            for j in json_data:
                if j['lab_no'] == str(crs_obj):
                    json = j
    
            summary = json['summary']
            self.fields['summary'].initial = summary
            self.fields['reported'].label = crs_obj
    
            tests = json.get('tests', None)
            if tests:
    
                test_choices = (
                        ('mutated', 'mutated'),
                        ('mutated - see comments', 'mutated - see comments'),
                        ('awaiting confirmation', 'awaiting confirmation'),
                    )
    
                self.fields['tests'] = forms.ChoiceField(
                                required=True,
                                label='Current or repeat samples?',
                                choices=((k, test_choices) for k in tests),
                            )
    

    enter image description here

    我现在得到的是:

    相反,我希望每个基因和这些选择都有一个下拉列表。我需要为每个基因建立一个区域吗?我做这个的问题是每个结果可以有0-10个基因,这将是难以置信的难以在HTML表中呈现。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  0
  •   aal    8 年前

    您可能需要实现一些模板/客户端来处理这个问题,例如 Chosen 或 Selectize.js (参见选项组示例)。

    然后在表单类上实现 clean 和/或 clean_[field_name] 方法获取所选数据的格式。

    推荐文章