14

我有一个 Django 模型:

class Project(models.Model):
    user = models.ForeignKey(User)
    zipcode = models.CharField(max_length=5)
    module = models.ForeignKey(Module)

在我的views.py中:

def my_view(request):  
    ...
    project = Project.objects.create(
                  user=request.user,
                  product=product_instance,
                  ...
              )
    project.save()

我希望能够将用户保存为经过身份验证的用户或AnonymousUser(我可以稍后更新)。但是,如果我没有登录,我会收到此错误:

ValueError: Cannot assign "<django.utils.functional.SimpleLazyObject object at 0x1b498d0>": "Project.user" must be a "User" instance.

我猜Django不会保存,AnonymousUser因为它不是User模型中定义的用户。我需要将匿名用户添加到User模型中,还是我遗漏了什么?

非常感谢任何帮助。

4

1 回答 1

15

user字段是一个ForeignKey. 这意味着它必须引用一些用户

根据定义,AnonymousUseris no user:在 Django 中,没有AnonymousUserAand AnonymousUserB。他们都是一样的:AnonymousUser

结论:您不能将AnonymousUsera放入User ForeignKey.


不过,您的问题的解决方案非常简单:当User是匿名时,只需将该字段留空即可。为此,您需要允许它:

user = models.ForeignKey(User, blank = True, null = True)
于 2012-12-20T01:18:03.363 回答