Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对象没有属性';清理数据';在Django视图中验证后_Python_Python 3.x_Django - Fatal编程技术网

Python 对象没有属性';清理数据';在Django视图中验证后

Python 对象没有属性';清理数据';在Django视图中验证后,python,python-3.x,django,Python,Python 3.x,Django,我正在尝试为我的项目创建一个注册页面。标准型号User对我来说不够,所以我创建了另一个名为Profile的型号: class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) sex = models.CharField(max_length=1, choices=SEX_CHOICES, default='М', ve

我正在尝试为我的项目创建一个注册页面。标准型号
User
对我来说不够,所以我创建了另一个名为
Profile
的型号:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sex = models.CharField(max_length=1, choices=SEX_CHOICES, default='М',
                       verbose_name='Пол')
    third_name = models.CharField(max_length=30, verbose_name='Отчество')
    grade = models.CharField(max_length=2, choices=GRADE_CHOICES, default='1',
                         verbose_name='Класс обучения')
    age = models.PositiveSmallIntegerField(default=7, verbose_name='Возраст',
                                       validators=[
                                           MaxValueValidator(100),
                                           MinValueValidator(4)
                                       ]
                                       )
    school = models.ForeignKey(School, on_delete=models.PROTECT,
                           verbose_name='Учебное заведение',
                           blank=True, null=True, default=None)
    interest = models.ManyToManyField(OlympiadSubject,
                                  verbose_name='Интересующие предметы')
User
Profile
上,我创建了一个
ModelForm

class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'first_name', 'last_name')


class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('third_name', 'sex', 'grade', 'age', 'school', 'interest')
并编写了一个注册视图:

def create_profile(request):
if request.method == 'POST':
    user_form = UserForm()
    profile_form = ProfileForm()
    if user_form.is_valid() and profile_form.is_valid():
        User.objects.create(**user_form.cleaned_data)
        Profile.objects.create(**profile_form.cleaned_data, user=User)
        return redirect('/login')
    else:
        profile_form.add_error('__all__', 'Данные введены неверно!')
else:
    user_form = UserForm()
    profile_form = ProfileForm()
return render(request, 'users/profile_create.html', {
    'user_form': user_form,
    'profile_form': profile_form
    })
当然,我有一个模板:

{% extends 'main/layout.html' %}

{% block title %} Some text {% endblock %}

{% block content %}
    <form method="post">
        {% csrf_token %}
        {{ user_form.as_p }}
        {{ profile_form.as_p }}
        <button type="submit">Сохранить изменения</button>
    </form>
{% endblock %}
{%extends'main/layout.html%}
{%block title%}一些文本{%endblock%}
{%block content%}
{%csrf_令牌%}
{{user_form.as_p}
{{profile_form.as_p}
Сохранить изменения
{%endblock%}
但每次我都会犯同样的错误:
ProfileForm对象没有属性数据
我不知道如何修复它


这是我关于stackoverflow的第一个问题。抱歉,如果我写的东西不正确。

在POST请求中定义表单时,您没有将数据绑定到表单。由于您创建的表单为空,因此没有已清除的数据

试一试


您无法捕获POST请求附带的表单数据。 你可以写:

if request.method == 'POST':
    user_form = UserForm(request.POST)
    profile_form = ProfileForm(request.POST)

在这里,可能的领导是相当软弱的。它不是请求类型,而是来自POST请求的数据。OP正在用空参数创建新的空表单。@progmatico同意,我已经编辑了响应以使解释更精确。
if request.method == 'POST':
    user_form = UserForm(request.POST)
    profile_form = ProfileForm(request.POST)