Django - 不能分配"'传记测试""" User.biography"必须是"传记"实例

时间:2017-11-07 03:45:52

标签: django model extend

我用一个额外的字段扩展了用户模型 - 传记。它在管理面板中显示为新部分。这是一张图片:

enter image description here

这是新模型:

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}))

以下是错误消息的屏幕截图:

enter image description here

我混淆了什么,但我无法弄清楚是什么。我没有帮助我......还在尝试!

1 个答案:

答案 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

我希望它对你有用。