Django не анализирует форму из запроса POST - PullRequest
2 голосов
/ 02 июля 2019

Я пытаюсь разобрать форму HTML (созданную Django) в объект формы. Проблема в том, что при отправке формы я получаю ошибку 'PersonForm' object has no attribute 'name'. Я попытался использовать request.POST["name"] вместо этого, но это тоже не сработало. Вот что происходит, когда я печатаю form: <tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" value="wow" maxlength="14" required id="id_name"></td></tr>

Это мой models.py:

class Person(models.Model):
    name = models.CharField(max_length=14)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    null=True)

forms.py:

from django.forms import ModelForm
from findapp.models import Person

class PersonForm(ModelForm):
    class Meta:
        model = Person
        fields = ["name"]

views.py:

def index(request):
    if request.method == 'GET':
        form = PersonForm()
        return render(request, "findapp/person.html", {"form": form})
    elif request.method == 'POST':
        form = PersonForm(request.POST)
        print(form.name)

person.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <form method="POST">{% csrf_token %}
        {{ form.name }}
        <button type="submit">Save</button>
    </form>

</body>
</html>

1 Ответ

1 голос
/ 02 июля 2019

вы делаете это неправильно в views.py.

это должно быть так:

def index(request):
    form = PersonForm(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            # person = form.save(commit=False)
            print(form.cleaned_data['name'])
            # person.save()
            return HttpResponse('Ok')
    return render(request, "findapp/person.html", {"form": form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...