4

我的 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 不允许您将 AnonymousUser 的实例保存为 Post 类的外键。

我正在考虑在数据库中添加一个“虚拟”用户记录,该记录代表匿名用户(id = 0,或者如果可能的话,是一些负数),它将用于没有用户的所有帖子。如果存在,则可以使用可为空的名称字段来表示匿名用户的昵称。

这个解决方案对我来说似乎有点 hacky。有没有更清洁更有效的解决方案?

4

4 回答 4

6

如果您可以通过一些会话信息识别新用户,您可以创建普通用户帐户,可以说是形式上的 - 使用标志将它们识别为易失性(这可能会导致一些定期维护清理)。

如果在会话生命周期内,用户确实想注册,您可以重用您这边的用户帐户,并且用户可以保留他的所有数据。

正如@slacy 评论和@Dominique 回答的那样;而不是自己滚动查看现有项目,例如:

于 2011-01-03T13:09:11.367 回答
1

未经测试,但这可以帮助: https ://github.com/danfairs/django-lazysignup

于 2011-01-03T13:56:24.293 回答
0

如果用户是匿名的,您可以添加blank=Trueand并将null=TrueUser ForeignKey设置为 。None您只需要将昵称存储在某处。

于 2011-01-03T13:08:15.600 回答
0

我是 Django 的新手。一位朋友告诉我不要使用ForeignKey,进一步说明使用CharField是可以的。ForeignKey比 慢CharField,因为它对用户信息进行了一些检查。

于 2014-12-26T10:21:19.237 回答