2017-07-03 58 views
0

我想,只有當前用戶可以只改變了他的數據在Django確保當前用戶將只能對自己數據的Django

例如激活他創建/ desactivate內容THA更改/蟒蛇..

這是我對激活產品視圖功能:

def Activer(request, produit_id): 
    produit = Produit.objects.get(pk=produit_id) 
    produit.etat = "active" 
    produit.save() 
    return JsonResponse({'success':True}) 

,這是我在produit.html代碼:

{% if produit.etat == "active" %} 

然而,這是所有用戶訪問..

+1

你可以添加你的模型,請詳細說明問題,進一步解釋你到底做了些什麼,以及你得到了什麼錯誤? – zaidfazil

+0

顯示模型廣告完整模板 – Exprator

+0

模型etat: 'etat = models.CharField(max_length = 250,choices = etat_choix,default =「desactive」)' –

回答

1

您需要檢查是否Produit由當前用戶創建其他人告訴Produit不允許編輯的用戶。

def Activer(request, produit_id): 
    produit = Produit.objects.get(pk=produit_id) 
    if produit.user.id == request.user.id: ## check if this produit is created current user. 
     produit.etat = "active" 
     produit.save() 
     return JsonResponse({'success':True}) 
    else: # else response the user that not allowed to edit the Produit. 
     return JsonResponse({'error':'You are not allowed to edit this product.'}) 
+0

它總是返回 '「錯誤」:'你不允許編輯這個product.'' 而我只是說該產品當前的用戶... –

+0

@AdelGhattassi請嘗試,我已經更新了代碼。 –

+0

我覺得有與'filter'屬性 'produit = Produit.objects.filter(PK = produit_id)' 它返回一個問題:'「查詢集」對象有沒有屬性「用戶」 ' 當我將其更改爲'得到'它的工作,但總是返回''錯誤':'你不允許編輯這個產品。' –

1
@login_required  
def Activer(request, produit_id): 
    try: 
     produit = Produit.objects.get(pk=produit_id) 

     if produit.user == request.user: ## check if this produit is created current user. 
      produit.etat = "active" 
      produit.save() 

      return JsonResponse({'success':True}) 

     else: # else response the user that not allowed to edit the Produit. 

      return JsonResponse({'error':'You are not allowed to edit this product.'}) 

    except Produit.DoesNotExist: 
     return JsonResponse({'error' : 'object dose not exist'}) 

如果你想有request.user要求對象作爲身份驗證的用戶不是匿名的,你應該叫在登錄狀態下您的看法。

0

這可能是最好只使用update(),而不是做一個選擇,更新,保存:

@login_required 
def Activer(request, produit_id): 
    count = Produit.objects.filter(pk=produit_id, user=request.user).update(etat='active') 
    return JsonResponse({'success': count == 1} 

這是避免可能從數據庫加載對象之間發生潛在的競爭條件的優勢並隨後保存回去。

相關問題