我用一个额外的字段扩展了用户模型 - 传记。它在管理面板中显示为新部分。这是一张图片:
这是新模型:
class Biography(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
biography = models.TextField(max_length=500, blank=True)
这是个人资料视图:
def profile(request, username):
user = get_object_or_404(User, username=username)
products = Product.objects.filter(user=user)
if not request.user == user:
return render(request, 'no.html')
else:
return render(request, 'profile.html', {'user':user,'products': products})
我使用表单编辑个人资料 - 这里是视图:
def edit_profile(request):
user = request.user
products = Product.objects.filter(user=user)
form = EditProfileForm(request.POST or None, initial={'first_name':user.first_name, 'last_name':user.last_name, 'biography':user.biography})
if request.method == 'POST':
if form.is_valid():
user.first_name = request.POST['first_name']
user.last_name = request.POST['last_name']
user.biography = request.POST['biography']
user.save()
return render(request, 'profile.html', {'user':user, 'products':products})
context = {"form": form}
return render(request, "edit_profile.html", context)
......以下是表格:
class EditProfileForm(forms.Form):
first_name = forms.CharField(label='First Name')
last_name = forms.CharField(label='Last Name')
biography = forms.CharField(label='Biography', widget=Textarea(attrs={'rows': 5}))
以下是错误消息的屏幕截图:
我混淆了什么,但我无法弄清楚是什么。我没有帮助我......还在尝试!
答案 0 :(得分:1)
正如错误消息所示:
"User.Biography" must be a "Biography" instance.
在edit_profile
定义中,您有以下任务:
user.biography = request.POST['biography']
request.POST['biography']
不是Biography
的有效实例。因此,您必须根据Biography
模型使用Biography
创建有效的request.POST['biography']
实例。
之后,您可以将有效的实例分配到user.biography
。
我希望它对你有用。