Database 在django中使用昵称存储匿名用户的优雅方式?
我的django应用程序中有一个简单的Post模型:Database 在django中使用昵称存储匿名用户的优雅方式?,database,django,anonymous-users,Database,Django,Anonymous Users,我的django应用程序中有一个简单的Post模型: class Post(models.Model): category = models.CharField(max_length=10, choices=choices) message = models.CharField(max_length=500) user = models.ForeignKey(User, editable=False) 我想实现让匿名用户用昵称创建帖子的功能。不幸的是,django不允许
class Post(models.Model):
category = models.CharField(max_length=10, choices=choices)
message = models.CharField(max_length=500)
user = models.ForeignKey(User, editable=False)
我想实现让匿名用户用昵称创建帖子的功能。不幸的是,django不允许您将AnonymousUser的实例保存为Post类的外键
我正在考虑在数据库中添加一个“虚拟”用户记录,该记录表示匿名用户(id=0,如果可能的话,也可以是负数),用于所有没有用户的帖子。如果存在,将使用一个可为空的名称字段来表示匿名用户的昵称
这个解决方案对我来说似乎有点老套。是否有更有效的解决方案?如果用户是匿名用户,您可以将
blank=True
和null=True
添加到User
ForeignKey
,并将其设置为None
。您只需要将昵称存储在某个位置。如果您可以通过一些会话信息来识别新用户,您可以创建正常的用户帐户,可以说是形式上的,带有一个标志来识别他们为易失性的(这可能会导致一些定期维护清理)
如果在会话生存期内,用户确实想要注册,那么您可以重用您的用户帐户,并且用户可以将其所有数据保留在自己的帐户上
正如@slacy评论和@Dominique回答的那样;不要滚动自己的项目,而是查看现有项目,例如:
- 未测试,但这有助于:
我是Django的新手。一位朋友告诉我不要使用
ForeignKey
,还说使用CharField
可以ForeignKey
比CharField慢,因为它对用户信息进行了一些检查。一旦用户为空,我还可以加入吗?这与django lazysignup使用的方法相同,我建议使用它,而不是自己滚动。注意,因为你将有临时用户、爬虫和其他各种随机的东西创建(可能)永远不会消失的用户帐户。django Lazyingup处理得很好。