Как исключить поле формы в представлении Django - PullRequest
0 голосов
/ 31 августа 2018

Я использую Django 1.9.5 Я использую форму на мой взгляд. Я буду использовать ту же форму в forms.py для GET и POST, на мой взгляд. Я хочу исключить одно поле, если это GET. Я хочу, чтобы он показывал все поля, если это POST. Я не хочу использовать 2 разные формы в forms.py для одного и того же представления.

Views.py

method = 'GET'
mine_form = MineForm(prefix='mine', method=method)

Forms.py

class MineForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput, required=False)
    re_password = forms.CharField(
        widget=forms.PasswordInput, label='Re-type Password', required=False)

    class Meta:
        model = Mine
        exclude = []
        widgets = {
            'gender': forms.RadioSelect(renderer=HorizontalRadioRenderer),
            'uuid': forms.HiddenInput(),
        }
        exclude = ['user', ]

        def __init__(self, *args, **kwargs):
            self.method = kwargs.pop('method', None)
            super(MineForm).__init__(*args, **kwargs)
            if self.method == 'GET':
                self.fields.pop('delete_mine')

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы можете просто удалить поле из fields dict, если это запрос GET:

if request.method == 'GET':
    del self.fields["yourField"]
0 голосов
/ 31 августа 2018

Переопределите метод __init__() вашей формы как,

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)
    age = forms.IntegerField()

    <b>def __init__(self, *args, **kwargs):
        self.method = kwargs.pop('method', None)
        super(NameForm, self).__init__(*args, **kwargs)
        if self.method == 'GET':
            self.fields.pop('age')</b>

и в ваших представлениях передайте method аргумент как,

def get_name(request):
    if request.method == 'POST':
        <b>form = NameForm(request.POST, method='POST')</b>
        if form.is_valid():
            return HttpResponseRedirect('/thanks/')
    else:
        <b>form = NameForm(method='GET')</b>

    return render(request, 'name.html', {'form': form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...