2016-10-04 43 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') 
相關問題