2016-10-04 4 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을 필요로하는 모든 뷰에 대해이 작업을 수행 할 수 있습니다. 내가 원하는 어떤 사이트 전체 내가 설정을 입력 할 수 또는 내가

답변

1

을 Prabhakar, 당신은 django 인증 그룹을 사용해야합니다. 그러나 사용자 지정 권한 클래스를 작성하려는 경우이를 수행 할 수도 있습니다.

1) 가정 파일 이름 -> self_defined_permission.py 당신이 기능을 기반으로보기를 사용하는 경우 클래스를 기반으로보기

 from self_defined_permission import ShopPermissions 

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

3)에서

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 rest_framework.decorators import permission_classes 

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

user_passes_test 장식 시도 this.Thanks에 대해 갈 수있는 방법을 @login_required 호야처럼보기에 넣어 : 주어진 대답은 당으로

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') 
관련 문제