2012-10-18 25 views
0

Env:Python 2.7.3 || Django 1.4.1比較字符串和數據庫對象django

我想限制基於登錄用戶的角色的網頁菜單選項。我已經在模型中創建了一個UserProfile類,並將其鏈接到了用戶,如文檔中所描述的那樣(在添加用戶時,在Django Admin中完美工作)。例如,普通用戶只有「家庭」和「mytasks」,而管理員用戶也會擁有「域名任務」。

這裏是在base.html文件模板代碼:

{% if user.get_profile.role == "Admin" %} 
    <ul id="nav"> 
    <li><a href="{% url home %}">Home</a></li> 
    <li><a href="{% url mytasks %}">My Tasks</a></li> 
    <li><a href="{% url domaintasks %}">Domain Tasks</a></li> 
    </ul> 

以上渲染整個網站的導航欄時被選中。

我認爲問題在於比較一個字符串與數據庫對象(下面打印),但一直沒能找到如何讓比較工作。

>>> b = Role.objects.all() 
>>> print b 
[<Role: Admin>, <Role: User>] 

回答

0

有做這件事的2種方式。

  • 檢查Role的適當屬性,而不是檢查對象。所以,如果你在Rolename屬性,你可以檢查爲

{% if user.get_profile.role.name == "Admin" %}

  • ,如果你可以修改Role模型的代碼的另一種方式是實現Role模型的方法來檢查,如果角色是admin並在模板中使用它。

{% if user.get_profile.role.is_admin %}

+0

以爲我並不遙遠,在我的腦海中,我將符號鏈接的角色對象添加到角色的屬性中......添加了atrribute並且它現在可以工作! – Sawwy

0

解決你的問題是使用可以Django管理分配這些團體用戶註冊,以創建組,爲每種類型的用戶的正確方法,你甚至可以寫爲現有用戶的腳本,然後使用in_group模板過濾器來檢查用戶是否具有所需的權限。

但隨着你的方法,角色是一個屬性或userprofile類中的函數,它返回一個字符串?如果是,那麼我認爲你的代碼應該工作。 但如果角色是foriegn重點對象,以另一種模式,那麼你應該使用比較類似: -

user.get_profile.role.attribute_in_the_other_model 
+0

感謝。我不想質疑我的方法,因爲我想有一個明確的問題,並且我的第一次迭代工作。最初我正在考慮角色,在下一個週期將會仔細研究它。 – Sawwy

0

的另一種方法是調用角色模型的用於附加信息的字符串表示方法

{% if user.get_profile.role.__str__ == "Admin" %} 

{% if user.get_profile.role.__unicode__ == "Admin" %}