How does Django Know the Order to Render Form Fields?

后端 未结 14 1451
不知归路
不知归路 2020-11-28 05:21

If I have a Django form such as:

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = fo         


        
14条回答
  •  甜味超标
    2020-11-28 06:05

    Use a counter in the Field class. Sort by that counter:

    import operator
    import itertools
    
    class Field(object):
        _counter = itertools.count()
        def __init__(self):
            self.count = Field._counter.next()
            self.name = ''
        def __repr__(self):
            return "Field(%r)" % self.name
    
    class MyForm(object):
        b = Field()
        a = Field()
        c = Field()
    
        def __init__(self):
            self.fields = []
            for field_name in dir(self):
                field = getattr(self, field_name)
                if isinstance(field, Field):
                    field.name = field_name
                    self.fields.append(field)
            self.fields.sort(key=operator.attrgetter('count'))
    
    m = MyForm()
    print m.fields # in defined order
    

    Output:

    [Field('b'), Field('a'), Field('c')]
    

提交回复
热议问题