0

在我的 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))

错误:无法分配“”:“User_Wishlist.created_by”必须是“用户”实例。

因此,它不能为匿名用户创建愿望清单。此外,如果我只执行 wl_user = User_Wishlist(),它无法在不分配用户 ID 的情况下访问 manytomany 字段“产品”。

对此的任何帮助都会很棒。谢谢!

ps:我也想在匿名用户注册后保存这个用户愿望清单,但那是以后的问题

4

2 回答 2

2

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

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

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

于 2013-04-17T20:17:32.813 回答
0

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

于 2013-04-19T06:50:39.910 回答