Django:匿名会话&“临时的"一对一的相关模型? [英] Django: Anonymous session & "temporary" one-to-one related model?

查看:35
本文介绍了Django:匿名会话&“临时的"一对一的相关模型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当前,对于每个已注册的 CustomUser (OneToOne关系),我都有一个 Cart 模型:

Currently, I have a Cart model for each registered CustomUser (OneToOne relation):

class Cart(models.Model):
    created_at = models.DateTimeField(auto_now_add = True)
    user = models.OneToOneField(CustomUser, related_name='cart')

但是现在我对匿名用户(来宾)有一些要求.在查找了一些文章之后,似乎需要召开会议吗?

But now I have some requirement for anonymous user (guest). after looking for some articles, session seems to be required?

  1. 基于数据库的简单会话.
  2. 如何在需要时让访客拥有相关的临时 GuestCart 模型:
    • 因为我什至不希望机器人也有推车来浪费资源.
    • 所以...我可以 GuestCart.objects.create(session = request.session ['cart'])#只是伪代码,我不确定该怎么做 客人何时调用视图?

**更新@ 2015/3/21:当前,我将新密钥 cart_id 添加到 request.session 中,而不是将会话信息保存到DB中.

** Update @ 2015/3/21: currently, I add a new key cart_id into request.session, and not save session info into DB.

推荐答案

为了支持匿名用户,我相信您的 Cart 模型类应该看起来像这样;

In order to support anonymous users i believe your Cart model class should looks like this;

class Cart(models.Model):
    created_at = models.DateTimeField(auto_now_add = True)
    user = models.OneToOneField(CustomUser, blank=True, null=True, related_name='cart')
    session_key = models.CharField(max_length=40)

  class Meta:
    unique_together = ('user', 'session_key',)

然后,您可以使用以下内容检索用户购物车:

Then you can retrieve the user cart with something like this:

if request.user.is_authenticated():
    cart, created = Cart.objects.update_or_create(
        user = request.user,
        defaults = {'session_key': request.session.session_key}
    )
else:
    cart, created = Cart.objects.get_or_create(
        session_key = request.session.session_key,
        defaults = {'user': None}
    )

,如果以后需要结帐流程,您可以随时更改购物车并添加用户.

and later on if the checkout process required registration you can always alter the cart and add the user.

这篇关于Django:匿名会话&“临时的"一对一的相关模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆