2016-10-04 42 views
0

我不会需要编写很多代码,我只是需要一个想法。我试图让两个不同的类别的用户。这是一个用户可以有一个配置文件或购物都不是两个。在Django中注册不同类型的用户

class Profile(models.Model): 
    user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,editable=True) 

class Shop(models.Model): 
    user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,editable=True) 

我希望所有用户要么有两个之一,他们将在现在我在做什么是相同的形式注册,而不能一旦他们已经注册it.As从一个切换到另一个如果我不想商店拥有的用户有一个轮廓的previlege我做

def post_product(request): 
    try: 
     if bool(request.user.profile)==False: 
      ..... 
    except: 
     pass 

但我要为需要previledges所有视图做到这一点。我想要的东西站点范围内的,我可以把设置或将在视图像@login_required。请我怎么能去this.Thanks

回答

1

按照给出的答案Prabhakar,你应该使用django auth组。 但是,如果你想写你的自定义权限类,你也可以这样做。

1)假设文件名 - > self_defined_permission.py

from rest_framework import permissions 
from django.contrib.auth.models import Group 

class ShopPermissions(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     ''' 
     check user group. Assuming you keep users having profile in group 1 and shop in group 2 
     ''' 
     shop_gp = Group.objects.get(id=2) 
     if shop_gp in request.user.groups.all(): 
      return True 
     else: 
      return False 
     ''' 
      similarly you could write permission class for profile owners 
     ''' 

2)如果使用的是基于功能视图你的类的基于视图

 from self_defined_permission import ShopPermissions 

    class SomeView(generics.ListCreateAPIView): 
     ... 
     permission_classes = (ShopPermissions,) 

3)。

from rest_framework.decorators import permission_classes 

    @permission_classes((ShopPermissions,)) 
    def some_view(request): 
     .... 
0

尝试user_passes_test装饰:

from django.contrib.auth.decorators import user_passes_test 

def is_shop(user): 
    return Shop.objects.filter(user=user).exists() 

def is_normal_user(user): 
    return Profile.objects.filter(user=user).exists() 

@user_passes_test(is_shop) 
def only_for_shops(request): 
    return render(request, 'edit_price_list.html') 
相关问题