我有一个Django模型,它存储来自表单输入的用户和产品数据:

def ProductSelection(request, template_name='product_selection.html'):
    ...
    if user.is_authenticated():
        user = request.user
    else:
        # deal with anonymous user info
    project = Project.objects.create(
        user=user,
        product=form.cleaned_data["product"],
        quantity=form.cleaned_data["product_quantity"],
    )

当然,这对于经过身份验证的用户来说很好,但我也希望能够存储匿名用户项目,如果可能的话,在用户最终注册和身份验证时将它们与用户相关联.

我的 idea 是创建名称=SOME_VARIABLE(时间戳与随机哈希连接?)的匿名用户,然后将该用户名保存在会话数据中.如果我确保使用会话变量(如果存在)来记录该用户所有项目活动,则我应该能够在项目注册时使用该用户的真实凭据更新项目.

这是不是过于复杂和易碎?我是否冒着不必要地保存数千行数据的风险?解决这一常见问题的最佳方法是什么?

任何关于这方面的指导都将不胜感激.

推荐答案

您可以使用Django's session framework存储匿名用户数据.

然后,您可以在Project模型中添加一个字段来保存匿名用户的session_key值,

project = Project.objects.create(
    user=request.user,  # can be anonymous user
    session=request.session.session_key,
    product=form.cleaned_data["product"],
    quantity=form.cleaned_data["product_quantity"])

或者简单地存储项目实例在会话中拥有的所有数据

if user.is_authenticated():
    project = Project.objects.create(
        user=request.user,
        product=form.cleaned_data["product"],
        quantity=form.cleaned_data["product_quantity"])
else:
    # deal with anonymous user info
    request.session['project'] = {
        "product": form.cleaned_data["product"],
        "quantity": form.cleaned_Data["product_quantity"]}

您可以在稍后创建合适的用户时从会话中检索数据.

Django相关问答推荐

自定义公钥打破Django管理内联逻辑

在AWS s3中获取项目的URL

如何在 Django 中设置与 Session 相关的字段

Django基于查询集动态筛选字段名称

有什么方法可以自动设置 Debug True Django application

Django:获取每组最新的N条记录

表单集中的每个表单验证

Django celery 页面给出 404

relation "django_site" does not exist

如何在 Django 中返回静态 HTML 文件作为响应?

base.html 中的 Django 变量

使用 Django 1.5 实现多种用户类型

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

对 django 的 Http Delete 请求返回 301

django:TypeError:'tuple'对象不可调用

如何将 ManyToManyField 呈现为复选框?

获取 django 应用的绝对路径

登录后django重定向不起作用next不发布?

如何在 django 中使用更少的 css?

Django Admin - save_model 方法 - 如何检测字段是否已更改?