2017-04-04 62 views
0

後,我有3種類型的用戶在我的models.py考慮使用自定義權限登錄的Django

class Customer(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘Customer’) 

class ClientTypeA(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘ClientA’) 

class ClientTypeB(models.model) 
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘ClientB’) 

我使用權限在我的基礎模板來呈現相關側邊欄,但現在我還結合每個用戶的特定儀表板以及側邊欄,所以我發現爲每個用戶類型創建主頁視圖會更簡單。

一旦我登錄用戶在其其重定向到我家視圖 - 所以我在views.py想出了這個

def home(request): 

    if request.user.is_customer: 
     return redirect(customer_home) 

    elif request.user.is_clientA: 
     return redirect(clientA_home) 

    elif request.user.is_clientB: 
     return redirect(clientB_home) 

    else: 
     return render(request, 'home.html') 

調用的重定向將簡單地把他們帶到有相應的主頁。

  1. 我知道我的is_customer,is_clientA,is_clientB不會自動來使用Django,如何和我在哪裏添加這些自定義的權限?我的models.py?爲了簡單檢查,我將它們設置爲什麼等於活動的用戶類型?我甚至需要自定義權限還是有更簡單的方法來調用用戶類型?

  2. 我用於很多if語句嗎? (我試圖保持它的簡單和快速)

回答

1

由於所有的型號都有一個對一個字段到User模型,你可以使用has_attr檢查用戶是否具有行爲模型。您不必創建權限。

if hasattr(request.user, 'customer'): 
    return redirect('customer_home') 

如果您只有三種客戶類型,那麼if/elif/else可能沒問題。隨着數量的增加,您可以將其更改爲如下所示的內容。

customer_types = [ 
    ('customer', 'customer_home'), 
    ('clienttypea', 'ClientA_home'), 
    ... 
] 

for field_name, redirect_url in customer_types: 
    if hasattr(request.user, field_name): 
     return redirect(redirect_url) 
# fallback 
return render(request, 'home.html')