2016-12-26 4 views
0

私は現在、これらは私のモデルですジャンゴモデルに対するDjangoの許可はどのように自動的に行われますか?

の許可モジュールを練習しています:

from django.db import models 


# Create your models here. 
class School(models.Model): 
    name = models.CharField(max_length=100) 
    address = models.TextField() 

    def __unicode__(self): 
     return self.name 


class Teacher(models.Model): 
    school = models.ForeignKey(School) 
    first_name = models.CharField(max_length=50) 
    middle_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 

    def name(self): 
     return '{0} {1} {2}'.format(self.first_name, 
            self.middle_name, 
            self.last_name) 

    def __unicode__(self): 
     return self.name() 


class Section(models.Model): 
    """ 
    This model must only be manipulated by its respective teacher 
    """ 

    teacher = models.ForeignKey(Teacher) 
    name = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.name 


class Student(models.Model): 
    """ 
    This model must only be manipulated by its respective teacher 
    """ 

    section = models.ForeignKey(Section) 
    first_name = models.CharField(max_length=50) 
    middle_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 

    def name(self): 
     return '{0} {1} {2}'.format(self.first_name, 
            self.middle_name, 
            self.last_name) 

    def __unicode__(self): 
     return self.name() 


class Subject(models.Model): 
    """ 
    This model must only be manipulated by its respective student 
    """ 

    student = models.ForeignKey(Student) 
    name = models.CharField(max_length=50) 
    code = models.CharField(max_length=50) 

    def __unicode__(self): 
     return self.name 

そして、私のジャンゴ-adminに私のようなグループを作成しました:私のviews.pyで

principal # Can change, add and delete Teacher Model 
teacher # Can change, add and delete Student and Section Model 
school_admin # Can change, add and delete School Model 
student # Can change, add and delete Subject Model 

を私は認証してログインしようとしましたが、先生のグループを持つユーザーにログインしてから、次のようなSchoolオブジェクトを作成しようとしました:

def index(request): 
    template = 'login.html' 
    user = request.user 
    login_form = LoginForm(request.POST or None) 
    context_dict = {'login_form': login_form} 

    if user.is_authenticated(): 
     groups = user.groups 
     print 'User:' 
     print user 
     if groups.filter(name='teacher').exists(): 
      print 'Teachers' 
      # The code below will save even though it is not in its permission 
      School.objects.create(name='DPS', address='Some Address') 
     return HttpResponse("Login") 

    if request.method == 'POST': 
     if login_form.is_valid(): 
      username = login_form.cleaned_data['username'] 
      password = login_form.cleaned_data['password'] 
      # print (login_form.cleaned_data) 
      # user = authenticate(username=username, password=password) 
      user = authenticate(email=username, password=password) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return HttpResponseRedirect('/') 
      else: 
       return HttpResponse("Wrong Username Password") 

    return render(request, template, context_dict) 

Schoolオブジェクトが作成されました。しかし、ログインしたユーザーにはSchoolオブジェクトを作成する権限がないため作成できませんでした。多くのコーディングをしなくても?または、実際にビューでグループと権限を手動で使用して条件文を入力する必要がありますか?

答えて

1

私はライン

School.objects.create(name='DPS', address='Some Address') 

が独立した表現であると考えています。教師フィルタを通過する限り、文脈や許可については考えられないため、コード内で実行されます。あなたは単にあなたが望むものを達成するために条件文を使うことができます。

+0

私はそう思った...ありがとう! –

関連する問題