2013-03-01 77 views
1

在我rest_framework設置我設置SessionAuthentication作爲默認的認證類如何禁用導入authtoken.models時使用SessionAuthentication與django-rest-framework?

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication', 
) 

的問題是,我的用戶刪除API視圖試圖瓦解刪除的authtoken_token表,它不存在(因爲我不需要它),引發數據庫異常。

具體而言,當obj.delete()在DestroyModelMixin.destroy被調用時,拋出此異常:

DatabaseError: relation "authtoken_token" does not exist 
LINE 1: ...oken"."user_id", "authtoken_token"."created" FROM "authtoken... 

是執行syncdb rest_framework的車型需要一個,即使一個並不需要它們?

有沒有辦法使用SessionAuthentication而不包括authtoken.models?

我做錯了什麼?

(除去authtoken.models.Token完全rest_framework/authentication.py似乎解決了問題)

+0

不,你不需要'syncdb',除非你在'INSTALLED_APPS'設置中明確地安裝了'rest_framework.authtoken'。 你有沒有在你的'INSTALLED_APPS'中意外得到這個,或者你是否無意中創建了一個ForeignKey或其他關係?什麼是完整的追溯? – 2013-03-01 15:18:06

+0

我沒有明確地在我的INSTALLED_APPS(僅rest_framework)中安裝rest_framework.authtoken。但是我開始懷疑在我們相當複雜的django項目的背景下發生了一些自動化的事情。有關如何調試的任何想法?以下是從DestroyModelMixin開始的回溯:https://gist.github.com/nejcjelovcan/5dc47eea7134e12f5d6b – 2013-03-01 15:25:38

+0

視圖正在使用的模型的模型定義是什麼? – 2013-03-01 15:46:47

回答

1

這裏的根本原因......

https://code.djangoproject.com/ticket/19422

將整理出一個解決辦法同時,這可能只涉及確保Token不會被導入任何地方,除非rest_framework.authtokenINSTALLED_APPS

+0

如果有人遇到這個問題,tom將它修改爲[此修訂版](https://github.com/tomchristie/django-rest-framework/commit/c5b98f0d106758298edf045e7bb44ecd7e4b9629),最簡單的解決方案是將版本升級到2.2.4(或以上) – tutuDajuju 2014-08-27 10:05:47