2016-07-28 8 views
0

私のビューファイルには次のコードがあります。AnonymousUserがDjangoのis_authenticatedに対してTrueを返すのはなぜですか?

if request.user.is_authenticated: 
    owner = request.user 
    if cart.owner != owner: 
     cart.owner = owner 
    cart.save() 

しかし、私は次のエラーに直面:

Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x103ff37b8>>": "Cart.owner" must be a "User" instance.

はなぜDjangoは、ユーザーが認証されていない場合でも、ラインcart.owner = ownerを実行していますか?

答えて

3

is_authenticatedは、ユーザーが認証されているかどうかではなく、その名前で利用できるメソッドがあるかどうかを確認するだけです。

メソッドを呼び出す必要があります。

if request.user.is_authenticated(): 
+1

Shit。ありがとう、初心者の間違い。 :) – MiniGunnR

+1

Django 1.10では、 'is_authenticated'がメソッドから属性に変わっているので、ユーザは呼び出しを忘れることによってキャッチされないことに注意してください。 – Alasdair