2016-04-27 86 views
0

我想添加一個額外的字段到與特定權限有關的查詢集,是否可以在CASE中使用「has_perm」?是否可以在Django的CASE查詢集中使用「has_perm」?

var_group = Group.objects.all().annotate(mypermission=Case(
When(self.has_perm('app.mypermission'), then=Value(True)), 
default=Value(False), 
output_field=BooleanField(), 
)) 

的錯誤是:

全局名稱 '自我' 是沒有定義

回答

1

self沒有定義。您在annotate中使用的self不是Group對象。該查詢集用於進行SQL查詢。 has_perm不是查詢構建的一部分。它是一個Group對象方法。

所以,答案是肯定的。

var_group = Group.objects.all().annotate(mypermission=Case(
When(permissions__codename='app.permission', then=Value(True)), 
default=Value(False), 
output_field=BooleanField(), 
)) 

還有另一種解決方案。我建議查詢所有的Group對象,然後逐個迭代它來註釋它。

var_group = Group.objects.all() 

for group in var_group: 
    if group.permissions.filter(codename='app.permission').exists(): 
     group.mypermission = True 
    else: 
     group.mypermission = False 
+0

這是一個好主意。我剛注意到,該組沒有方法「has_perm」,只與用戶**'組'對象有關,沒有屬性'has_perm'**。任何想法使用該方法的組? – Steve

+0

Ahhh您使用了Django Group模型https://docs.djangoproject.com/es/1.9/ref/contrib/auth/#group-model。它沒有'has_perm'方法。我會更新答案。 –

+0

第二個選項是完美的:just(codename ='app.permission')不起作用,我使用了(codename ='permission') – Steve

相關問題