2015-01-08 21 views
0

我正在嘗試編寫一個響應AJAX請求以刪除條目的視圖方法。我想在刪除該條目之前檢查最終用戶是否爲條目的實際作者。我的「if」聲明是否完成了這項工作?如何檢查用戶是否有權刪除Django中的對象

VIEWS.PY

latest_entries=Entry.objects.order_by('-pub_date')[:16] 

@login_required 
def delete_object(request): 
    if request.is_ajax(): 
     object_name = request.POST.get('entryname') 
     targetobject = Entry.objects.get(author=object_name) 
     if request.user = targetobject.author: 
     targetobject.delete() 
     return HttpResponseRedirect('/storefront/') 

模型

Class Entry(models.Model): 
    author = models.CharField(max_length=30) 
    subject = models.CharField(max_length=30) 
    description = models.CharField(max_length=30) 
+1

if request.user == targetobject.author:use == – Gaurav

+2

如果你在正確的道路上,你可以在問它之前測試它嗎? –

+0

也是你的查詢是正確的嗎? Entry.objects.get(author = object_name)感覺不對。 (如果是這樣,爲什麼不'如果request.user == object_name:'在第一位:P) – ppetrid

回答

0

你幾乎沒有。 request.userdjango.utils.SimpleLazyObject的一個實例,因此您將無法將request.user與CharField進行比較,其值爲字符串下的字符串。

你需要做的是這樣的:

if request.user.username == targetobject.author: 
    targetobject.delete() 

或者只是使用任何從User對象場是Entry.author的代名詞。

0

我想說你的模型是錯誤的。 author應該是auth.User模型的ForeignKey。然後,您的比較將起作用(更改爲==),並且在按用戶屬性進行分組和查詢方面也有其他好處。

+0

我只是加倍檢查,它實際上是ForeignKey auth.User.model。 – stephan

+0

我現在無法測試這個,因爲我離開了我的工作機器,但即使沒有外鍵,我猜它應該工作。 – stephan

相關問題