Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Django 使用会话存储匿名用户的数据_Django_Django Models_Django Sessions - Fatal编程技术网

Django 使用会话存储匿名用户的数据

Django 使用会话存储匿名用户的数据,django,django-models,django-sessions,Django,Django Models,Django Sessions,在我的django应用程序中,我有一个用户愿望列表功能。我希望匿名用户可以将产品添加到他的愿望列表中 models.py class User_Wishlist(models.Model): created_by = models.ForeignKey(User, default=None, null =True, blank=True) products = models.ManyToManyField(Products, null=True) # some Produc

在我的django应用程序中,我有一个用户愿望列表功能。我希望匿名用户可以将产品添加到他的愿望列表中

models.py

class User_Wishlist(models.Model):
    created_by = models.ForeignKey(User, default=None, null =True, blank=True)
    products = models.ManyToManyField(Products, null=True)


# some Products model

views.py
# to add an item from the user wishlist

def add_userwl(request, id):
    products = Products.objects.filter(id__iexact=id)
    product = products[0]
    if request.user.is_authenticated():
        userwlt = get_sl(request, request.user) #gets the auth user wishlist
        userwlt.products.add(product)
        sl_products = userwlt.products.all()
    else:
        if "wl_user" in request.session:
            wl_user = request.session["wl_user"]
        else:
            wl_user = User_Wishlist(created_by = request.user) #here lies the problem!
            request.session["wl_user"] = wl_user

        wl_user.products.add(product)
        wl_products = wl_user.products.all()

    return render_to_response('getsl.html', {
       'wl_products':wl_products
    }, context_instance=RequestContext(request))
错误:无法分配“”:“用户\u愿望列表。创建人”必须是“用户”实例

因此,它无法为其他用户创建愿望列表。另外,如果我只执行wl_user=user_Wishlist(),则在未分配用户id的情况下,它无法访问多个字段“products”

这方面的任何帮助都会很好。谢谢


p、 s:我还想在另一个用户注册后保存此用户愿望列表,但这是以后的问题

您对匿名用户的概念似乎是错误的。如果希望将数据绑定到某个“用户”,则必须为其创建一个“用户”。否则,每当会话过期或“用户”重置其浏览器缓存时,数据就会消失

现在,如何定义“用户”完全取决于您。它可以是“购物车”或“客户”或其他任何东西。没有理由不能使用与Django的auth模块提供的抽象不同的抽象


大多数正确实现此功能的站点都允许您不太多的“匿名”会话在某个时候绑定到可选帐户(这可能是oauth或openid解决方案)。

更简单的解决方案是要求将wishlis绑定到用户对象或会话对象。因此,允许这些字段为空,并实现有利于用户对象的逻辑。

谢谢您的回复!所以我创建了一个user=user(username=request.session.session\u key)…不知道是否将session\u键作为用户名或id是合适的,只是暂时做了测试。很好用!您认为如何创建用户对象,请记住,稍后我希望在用户注册时保存此数据。