Django: как изменить порядок полей формы связанной формы с одним свободным полем? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть форма обновления с 4 полями для отображения

3 из них относятся к классу, к которому привязана форма, последнее поле (страна) предназначено только для информации, и я хотел бы, чтобы это поле будет отображаться в первой позиции в настоящее время, он отображается в конце моей формы ...

Я пытался использовать field_order, но поле страны игнорируется ...

form.py

class ParametrageForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        super(ParametrageForm, self).__init__(*args, **kwargs)
        self.request = request
        self.language = request.session.get('language')
        self.user = request.user.id # id de l'utilisateur
        self.user_pays = request.session.get('user_pays') # pays de l'utilisateur
        self.user_site_type = request.session.get('user_site_type') 
        self.user_site = request.session.get('user_site') 
        instance = Parametrage.objects.get(asp_par_cle = kwargs['instance'].asp_par_cle) 

        SITE_CONCERNE = Site.option_list_sites(self.language)
        if self.language == 'en':
            country= Site.objects.get(sit_abr = instance.asp_par_loc).reg.pay.pay_nom_eng
        elif self.language == 'fr':
            country= Site.objects.get(sit_abr = instance.asp_par_loc).reg.pay.pay_nom_fra
        else:
            country= Site.objects.get(sit_abr = instance.asp_par_loc).reg.pay.pay_nom_eng

        self.fields["country"] = forms.CharField(label = _("Country"),widget=forms.TextInput,initial=country, disabled=True)
        self.fields["asp_par_loc"] = forms.ChoiceField(label = _("Site concerned by settings"), widget=forms.Select, choices=SITE_CONCERNE,)
        self.fields["asp_par_ale"] = forms.IntegerField(label = _("Stock alert value for this site"), widget=forms.TextInput,)
        self.fields["asp_par_con"] = forms.IntegerField(label = _("Stock confort value for this site"), widget=forms.TextInput,)    

    class Meta:
        model = Parametrage
        fields = ('asp_par_loc','asp_par_ale','asp_par_con',)

    field_order = ['country','asp_par_loc','asp_par_ale','asp_par_con',]

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я нашел, как решить мою проблему:

Я определил поле 'страна' за пределами init , и затем filed_order работает

, но делать это я не иметь доступ к исходному значению моей страны, установленному в init (country = Site.objects.get (sit_abr = instance.asp_par_lo c). reg.pay.pay_nom_eng)

Я должен улучшить мое Python понимание ...

0 голосов
/ 18 февраля 2020

Заменить

    self.fields["country"] = forms.CharField(label = _("Country"),widget=forms.TextInput,initial=country, disabled=True)

на

    country = forms.CharField(label = _("Country"),widget=forms.TextInput,initial=country, disabled=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...