在django中将用户实例从一个视图传递到另一个视图

时间:2017-10-31 06:35:39

标签: django django-models django-views

我是django的新手,我正在尝试将用户实例从一个视图传递到另一个视图,然后将数据保存在模型类别中,但是我收到此错误:

ValueError at /bookmark/category/
Cannot assign "45": "Category.user" must be a "User" instance.

书签是我的应用程序的名称。 注册新用户后,他将被重定向到另一个页面,在该页面中,他从下拉列表中选择类别。我希望使用相同的用户ID在Category模型中添加此选定的类别。

这是我的views.py代码:

def register(request):

    if request.method == 'POST':
        form = signUpForm(request.POST) 
        if form.is_valid():
            user = form.save()
            request.session['user'] = user.pk
            return render(request,'category.html')

def get_category(request):

    cname = request.POST.get("dropdown1")
    user = request.session.get('user')
    obj=Category(user=user,category=cname)
    obj.save()

这是models.py文件

from __future__ import unicode_literals

from django.db import models


from django.contrib.auth.models import User


class Category(models.Model):

    user = models.ForeignKey(User)
    category= models.CharField(max_length=100)

如果这是正确的做法或其他事情要做,有人可以指导吗?谢谢!

2 个答案:

答案 0 :(得分:1)

def get_category(request):

    cname = request.POST.get("dropdown1")
    user = request.session.get('user')
    obj=Category(user_id=user,category=cname)
    obj.save()

由于用户是外键,因此需要User Instance才能保存。

因为您拥有该用户的ID,您可以使用user_id进行保存

答案 1 :(得分:0)

除了obj = Category(user_id = user,category = cname)之外,我的模板中也存在问题。

我写过:

<select multiple = "dropdown1">

这就是我得到Null约束的原因。

我将其修改为

 <select name = "dropdown1" multiple>