2013-12-13 38 views
0

我想檢查用戶是否屬於'onetime'組或'monthtime'組在views.py,以便他們可以發佈帖子。我使用不屬於任何兩個組的用戶帳戶提交了表單,但我能夠成功提交帖子。相反,它應該告訴我,我沒有資格。檢查用戶是否屬於一個組在視圖

Models.py

class Emov(models.Model): 
    user=models.ForeignKey(User) 
    name=models.CharField(max_length=10) 
    #otherfields 

views.py

def e_hit(request): 
    if request.method=="POST": 
     form=EmovForm(request.POST, request.FILES) 
     if form.is_valid(): 
      one=Group.objects.filter(name='onetime') 
      month=Group.objects.filter(name='monthtime') 
      if request.user in one or month: 
       data=form.cleaned_data 
       newesell=Emov(
        user=request.user, 
        pub_date=datetime.datetime.now(), 
        name=data['name']) 
       newpos.save() 
       return HttpResponseRedirect('/approval/') 
      else: 
       return HttpResponse('You are not eligible') 
     else: 
      return HttpResponse('Fill the form') 
     else: 
     return render_to_response('post.html',{'EmovForm':EmovForm},context_instance=RequestContext(request)) 

回答

5

試試這個,這應該也爲您節省一些命中在數據庫上爲更具可讀性:

request.user.groups.filter(name__in=['onetime','monthtime']).exists() 
+0

感謝您的編輯@jschoen。 –

+0

感謝它的工作!如果我想在發佈後立即在「一次性」組中刪除用戶,那該怎麼辦?就像在newpos.save() – picomon

+1

那麼,那真是一個不同的問題。我不確定'auth.groups'是你想要處理這個問題的方式,但也許是這樣。 'g = Group.objects.get(name ='onetime') g.user_set.remove(request.user)'。 –

1

我覺得if request.user in one or month:應該是if request.user in one or request.user in month:

0

不要」忘記調用用戶設置。現在我認爲你的代碼會將request.user與組中的用戶比較,而不是用戶中的用戶。或者:

if request.user in one.user_set.all() or reguest.user in month.user_set.all() 

if one in request.user.groups.all() or month in request.user.groups.all() 

應該做你所需要的。

+0

從頭開始我的回答,Rob L's更好。 –

相關問題