2012-12-20 83 views
6

我有一個Django模型: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模型,還是我錯過了某些內容?

任何幫助非常感謝。

回答

9

user字段是ForeignKey。這意味着它必須參考一些用戶

根據定義,AnonymousUser沒有用戶:在Django,沒有AnonymousUserAAnonymousUserB。他們都是一樣的:AnonymousUser

結論:您不能在UserForeignKey中輸入AnonymousUser


解決您的問題是非常簡單的,但:當User是匿名的,只是離開領域的空白。要做到這一點,你需要允許它:

user = models.ForeignKey(User, blank = True, null = True) 
+0

好吧,太好了。因此,如果我在'AnonymousUser'上執行'user = request.user',那麼這個字段將是空白的,並且不會引發異常? –

+0

由於您向該字段提供了不適當的數據,因此將引發異常。只要執行'if request.user.is_authenticated():project.user = request.user' –

+0

我還必須添加'null-True',因爲該字段不能爲空嗎? –