【问题标题】:Defining field order in a dynamic Django form在动态 Django 表单中定义字段顺序
【发布时间】:2013-01-08 00:11:52
【问题描述】:

我已经编写了一个工厂函数来创建动态表单,正如 James Bennett 的有用帖子 http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/ 末尾所述。

表单运行良好,但项目显示的顺序有点随机,因为(我假设)fields 是一个字典(请参阅下面的代码示例)。如何为表单域规定一个已定义的显示顺序?

def make_form(assessment):
    '''
    Factory function to build and return dynamic AssessmentForms
    '''
    entries = assessment.entry_set.all()

    fields = {}

    for entry in entries:
        fields[entry.name] = forms.ChoiceField(
            required=False,
            initial=entry.rating,
            choices=CHOICES,
            widget=forms.RadioSelect()
        )

    return type('AssessmentForm', (forms.BaseForm,), { 'base_fields': fields })

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    富田裕二是对的。您可以使用例如:

    from django.utils.datastructures import SortedDict
    
    fields = SortedDict()
    
    for entry in entries:
        fields[entry.name] = forms.ChoiceField(
            required=False,
            initial=entry.rating,
            choices=CHOICES,
            widget=forms.RadioSelect()
        )
    

    【讨论】:

      【解决方案2】:

      使用SortedDictOrderedDict 2.7+ 的 djangos 实现)

      https://github.com/django/django/blob/master/django/utils/datastructures.py

      【讨论】:

        猜你喜欢
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 2021-12-18
        • 2011-01-31
        相关资源
        最近更新 更多