【问题标题】:Is there a way to make a user only view related objects to him in a model in django administration?有没有办法让用户在 django 管理的模型中只查看与他相关的对象?
【发布时间】:2020-06-30 21:11:14
【问题描述】:

我是 django 新手,我正在尝试完全在 django 管理中制作一个学校网络应用程序。

我正在尝试做的事情是为学生提供许可,使他们能够只看到scores,其student 字段与学生用户相同。

这是我的学生模型:

class Student(models.Model):
    student_name = models.CharField(max_length=12)
    student_last_name = models.CharField(max_length=12,null=True)
    student_age = models.PositiveSmallIntegerField(null=True)
    student_class = models.ForeignKey(Clas,on_delete=models.SET_NULL,null=True)
    student_idnum = models.CharField(max_length=15,null=True)
    user = models.OneToOneField(User,on_delete=models.SET_NULL,null=True)
    pub_date = models.DateTimeField("date published")
    def __str__(self):
        return self.student_name

这是我的学生分数模型:

class Score(models.Model):
    exam = models.ForeignKey(Exam,on_delete=models.SET_NULL,null=True)
    student = models.ForeignKey(Student, on_delete=models.CASCADE,null=True)
    score = models.FloatField(null=True)
    def __str__(self):
        return str(self.score)

我已经看到了Meta 模型,我应该将它用于自定义权限,但我真的不知道该怎么办。

【问题讨论】:

    标签: python django django-permissions


    【解决方案1】:

    official docs 有一个示例,可以满足您的需求。

    ModelAdmin 上的 get_queryset 方法返回管理站点可以编辑的所有模型实例的 QuerySet。覆盖此方法的一个用例是显示登录用户拥有的对象

    from django.contrib import admin
    
    class MyModelAdmin(admin.ModelAdmin):
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            if request.user.is_superuser:
                return qs
            return qs.filter(author=request.user)
    
    admin.site.register(MyModel, MyModelAdmin)
    

    您可以更改查询集以满足您的需求。

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多