2012-12-20 32 views
6

Tôi có một mô hình Django:Django cứu mô hình với người dùng nặc danh

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

Trong views.py tôi:

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

Tôi muốn để có thể tiết kiệm được sử dụng như một người dùng xác thực HOẶC một AnonymousUser (mà tôi có thể cập nhật sau). Tuy nhiên, nếu tôi không đăng nhập tôi nhận được lỗi này:

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

Tôi đoán rằng Django sẽ không lưu các AnonymousUser vì nó không phải là một tài khoản theo quy định tại các mô hình User. Tôi có cần phải thêm người dùng ẩn danh vào mô hình User hay không, tôi có đang thiếu gì đó không?

Bất kỳ hỗ trợ nào được đánh giá cao.

Trả lời

9

Trường userForeignKey. Điều đó có nghĩa là phải tham chiếu một số người dùng.

Theo định nghĩa, AnonymousUserkhông có người dùng: ở Django, không có AnonymousUserAAnonymousUserB. Chúng đều giống nhau: AnonymousUser.

Kết luận: bạn không thể đặt AnonymousUser trong một UserForeignKey.


Giải pháp cho vấn đề của bạn khá đơn giản mặc dù: khi User ẩn danh, chỉ cần để trống trường này. Để làm điều đó, bạn sẽ cần phải cho phép điều đó:

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

Ok, tuyệt. Vì vậy, nếu tôi làm 'user = request.user' trên' AnonymousUser' thì trường sẽ trống và không có ngoại lệ nào được nâng lên? –

+0

Một ngoại lệ sẽ được nâng lên vì bạn đã cung cấp dữ liệu không phù hợp cho trường. Chỉ cần làm 'nếu request.user.is_authenticated(): project.user = request.user' –

+0

Tôi cũng phải thêm' null-True', vì trường không thể là 'null'? –

Các vấn đề liên quan