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)