2015-11-05 1 views
0

У меня есть Отдел стол. И Студент стол, который ссылается на таблицу отделов. Я также создал пользовательскую модель, UserAugment, чтобы добавить поле отдела к модели пользователя по умолчанию.Как ограничить определенные поля в модели на основе пользователя в django

class Department(models.Model): 
    dname = models.CharField(max_length=200,primary_key=True) 

    def publish(self): 
     self.save() 

    def __str__(self): 
     return self.dname 

class UserAugment(AbstractUser): 
    department = models.ForeignKey(Department,null=True,blank=True) 
    objects = UserManager() 


class Student(models.Model): 
    sname = models.CharField(max_length=200) 
    usn = models.CharField(max_length=200,primary_key=True) 
    dept = models.ForeignKey(Department) 
    sem = models.IntegerField() 

    def publish(self): 
     self.save() 

    def __str__(self): 
     return '%s, %s' % (self.usn,self.sname) 

Теперь мне нужно создать пользователей, у которых к ним будет прикреплен отдел. И каждому пользователю должно быть предоставлено разрешение на добавление/редактирование/просмотр для студентов, принадлежащих их отделу. И у меня такой кошмар. Было ли это действительно просто? Спасибо за любую помощь, которая выльется.

ответ

0

Ну, это было то, что работало, наконец, для меня,

class StudentAdmin(admin.ModelAdmin): 
      def get_queryset(self, request): 
       qs = super(StudentAdmin, self).get_queryset(request) 
       if request.user.is_superuser: 
        return qs 
       return qs.filter(dept=request.user.department) 
0

Вы можете управлять контроль прав доступа в админ:

class UserAdmin(admin.ModelAdmin): 

    def has_change_permission(self, request, obj=None): 
     return self.user_has_permission(request, obj) 

    def user_has_permission(self, request, obj): 
     if hasattr(request.user, 'department') and obj is not None: 
      return request.user.department == obj.dept 
     return False 

Вы можете реализовать edit и delete полномочия по таким же образом.

+0

С одной стороны, это дает объект «WSGIRequest» не имеет атрибута «OBJ». Во второй части я не считаю, что мой admin.py настроен правильно. Мне нужно написать любой соответствующий код для моего UserAugment() в admin.py? Что-то вроде admin.site.register (UserAugment, UserAdmin) –

+0

Я вставил UserAdmin (admin.ModelAdmin) в admin.py. Надеюсь, это была опечатка, когда вы упомянули UserAdmin (models.ModelAdmin) –

+0

Да, извините, исправлено Это. И да, вам нужен admin.site.register (UserAugment, UserAdmin) –

Смежные вопросы