Как извлечь данные из формы в представления - PullRequest
0 голосов
/ 12 октября 2019

Я не могу получить данные из выбора формы (национальность) для проверки значений.

models.py

NATIONALITY_CHOICES = (('1', 'خليجي'), ('2', 'ليس خليجي'))
  nationality = models.CharField(max_length=250, 
choices=NATIONALITY_CHOICES, null=True)

, когда я проверяю свои поля в представлениях, он перенаправляет только thank_you_not!

views.py

def form_page(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
            if form.fields['nationality'].choices == 1:
                return redirect('LandingPage:thank_you')
            else:
                return redirect('LandingPage:thank_you_not')
    else:
        form = UserForm()
    posts = Article.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    return render(request, 'LandingPage/form_page.html', {'form': form, 'posts': posts,})

class UserForm(forms.ModelForm):
    class Meta:
        NATIONALITY_CHOICES = (('1', 'خليجي'), ('2', 'ليس خليجي'))
        model = User
        fields = ('first_name', 'second_name', 'E_mail', 'country', 'phone', 'phone_code','birthday', 'nationality',)
        widgets = {
            'first_name': forms.TextInput(attrs={'placeholder': 'الاسم الاول'}),
            'second_name': forms.TextInput(attrs={'placeholder': 'الاسم الثاني'}),
            'E_mail': forms.EmailInput(attrs={'placeholder': 'joe@schmoe.com'}),
            'nationality':  forms.Select(choices=NATIONALITY_CHOICES,attrs={'class': 'form-control'}),
        }

как я могу это решить?

1 Ответ

3 голосов
/ 12 октября 2019

Вы можете увидеть значения полей из формы, проверив cleaned_data:

if form.is_valid():
    nationality = form.cleaned_data['nationality']
    # do something based on nationality value

Позднее редактирование:

Кроме того, глядя на то, как определяются ваши выборы, вы можете столкнуться сдругой набор проблем с этим оператором if.

>>> one_str = '1'
>>> two_str = '2'
>>> one_str == 1
False

Вы определили строки как идентификаторы для выбранных вами значений. Измените их на int, чтобы сохранить эту логику нетронутой. В противном случае вы никогда не оцените field_valie == 1 как True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...