Sometimes the order of the fields you get from a model needs to be adjusted when displaying its modelform. If it's just a few fields you can do it in the template, but what if you want to iterate over the form?
The fields are stored in a SortedDict, so you can change the order in the init of the form. A bit clunky, yes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# This code is Public Domain where the Public Domain exists, # and covered by an MIT-license everywhere else (that is: # do as you wish with it, but you don't get to blame me # for anything) class Demo(models.Model): a = models.IntegerField() b = models.IntegerField() c = models.IntegerField() class DemoForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(DemoForm, self).__init__(*args, **kwargs) # order now: a b c value = self.fields.pop('c') new_pos = self.fields.keyOrder.index('b') self.fields.insert(pos, 'c', value) # order now: a c b class Meta: model = 'Demo'
More like this
- LazyPrimaryKeyRelatedField by LLyaudet 4 days, 12 hours ago
- CacheInDictManager by LLyaudet 4 days, 19 hours ago
- MYSQL Full Text Expression by Bidaya0 5 days, 13 hours ago
- Custom model manager chaining (Python 3 re-write) by Spotted1270 1 week, 4 days ago
- Django Standard API Response Middleware for DRF for modern frontend easy usage by Denactive 3 weeks, 6 days ago