Виджет Django ModelForm и порядок полей не виджетов - PullRequest
0 голосов
/ 21 мая 2019

У меня есть ModelForm django (1.11.9) для событий со временем (начало и конец). Когда я показываю его пользователю в шаблоне, я хочу, чтобы last_field было последним полем в форме внизу:

class EventForm(forms.ModelForm):
    dt = '%Y-%m-%d %H:%M'

    start = forms.DateTimeField(
        label="Start time (in event's local time)",
        required=False,
        input_formats=[dt]
    )

    end = forms.DateTimeField(
        label="End time (in event's local time)",
        required=False,
        input_formats=[dt]
    )

    class Meta:
        model = Event
        fields = [
         'name', 'flexibility', 'timezone', 
         'date_start', 'date_end', 'last_field', 
        ]

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

        self.fields['date_start'].widget = forms.HiddenInput()
        self.fields['date_end'].widget = forms.HiddenInput()

        i = kwargs.get('instance')
        tz = pytz.timezone(i.timezone) if i and i.timezone else None
        if i and i.flexibility == Event.FLEXIBILITY_ONTIME and tz:
            self.fields['start'].initial = i.date_start.astimezone(tz).strftime(self.dt) if i.date_start else None
            self.fields['end'].initial = i.date_end.astimezone(tz).strftime(self.dt) if i.date_end else None

        else:
            self.fields['start'].initial = None
            self.fields['end'].initial = None

однако, даже явно устанавливая 'last_field' в конце массива fields = [] (для документов https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#changing-the-order-of-fields), поля виджетов start и end в форме, отображаются под ним из поля набора заказ.

есть ли способ переопределить виджеты, чтобы принудительно упорядочить поля? спасибо

...