在用户注册之前保存 django 模型表单数据

Posted

技术标签:

【中文标题】在用户注册之前保存 django 模型表单数据【英文标题】:Saving django model forms data before user signs up 【发布时间】:2012-03-19 19:47:46 【问题描述】:

我使用的是django模型表单,表单即使没有注册的用户也可以填写,但是提交需要用户注册。 这是我的模型:

class Study(model.Model):
    marksobtained = models.CharField(max_length=5)
    highestmarks = models.CharField(max_length=5)
    teacher = models.CharField(max_length=300)

class StudyForm():
   some customisation stuff. 

然后是views.py

form = StudiesForm(request.POST or None,
                       instance=id and Studies.objects.get(id=id))
if form.is_valid():
      form.save()
      return render(request, 'calculate.html', 'detail': ret_dict, 'amt': amt)
      else:
          return render(request, 'forms.html', 'form':form)
    else:
          return render(request, 'forms.html', 'form':form)

不要担心视图中的缩进和其他内容,这只是我正在尝试做的一个模型,可以看出任何匿名用户现在都可以提交表单,我希望它进一步修改,如当匿名用户提交表单时,他应该首先注册,然后他的数据应该添加到模型中。

如何实现?

【问题讨论】:

【参考方案1】:

如果用户未通过身份验证,则将表单数据保存到会话。

然后将用户登录到系统中。

然后将表单数据拉出会话并保存获取经过身份验证的用户信息的信息。

【讨论】:

【参考方案2】:
    不需要用户 FK。保存模型。 如果request.user.is_authenticated() 给他一个带有创建模型ID 的cookie。将他重定向到登录页面。 为每个用户检查是否有带有模型 id 的 cookie,将用户附加到模型,保存。

【讨论】:

请详细说明,我无法理解,如果您有解释步骤的教程/帖子/链接,请在此处发布。谢谢 @user993563 这里到底有什么困难? 1.给他一个带有创建模型 ID 的 cookie。 2.使用户FK不reqd??这是否意味着用户模型不应该是外键?我是 django 的中间人,因此请详细说明谢谢。 @user993563 1, 2 ForeignKey('auth.User', blank=True, null=True) 如果有不清楚的地方,请随时询问。 我无法确定匿名用户是尚未注册还是尚未登录并且已经拥有帐户。所以我需要在登录时检查用户是否在会话/cookie 中有对象引用。我不明白你的观点3:你什么时候检查用户的会话?登录时间似乎合适,但我不知道该怎么做,我找不到任何信号。我不明白你的第 2 点,你的意思是“如果不是 request.user.is_authenticated()”吗?

以上是关于在用户注册之前保存 django 模型表单数据的主要内容,如果未能解决你的问题,请参考以下文章

django 中的表单不保存在 Psql 中

使用注册表单添加到自定义用户字段(django)

Django如何在保存到数据库之前连接表格数据

在Django中将计算值从视图保存到模型

Django:更新 X 数量模型的表单

在 Django 模型中保存时区