2013-12-13 37 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更好。 –

相关问题