【问题标题】:show only what admin add to DB django admin仅显示管理员添加到 DB django admin 的内容
【发布时间】:2020-08-04 20:35:30
【问题描述】:

请帮忙。有几个管理员拥有不同的权限。有一个模型,他们可以在其中添加产品。我想确保每个管理员都能看到他们自己添加的内容。在数据库表中有一行 сcreated_by。例如,我将我的书籍添加到数据库中,而另一个管理员添加了他的书籍。每个管理员都必须看到他添加的内容。 我该怎么做?

模型.py

class MyBooks(models.Model):
book = models.ForeignKey(Books, on_delete=models.CASCADE, blank=True, null=True, default=None)
fomil = models.CharField('Фомил',max_length=100, blank=True, null=True, default=None)
name= models.CharField('Ном',max_length=100, blank=True, null=True, default=None)
is_active = models.BooleanField('Ичозати таблиг (фаъол)',default=True)
created = models.DateTimeField('Санади сохташуда', auto_now_add=True, auto_now=False, )
updated = models.DateTimeField('Санади азнавшуда',auto_now_add=False, auto_now=True)

admin.py

class BooksAdmin(admin.ModelAdmin):
list_display = [field.name for field in MyBooks._meta.fields]

 def save_model(self, request, obj, form, change):
    if not obj.created_by:
        obj.created_by = request.user
    obj.save()

class Meta:
    model = MyBooks

【问题讨论】:

    标签: django filter controls admin


    【解决方案1】:

    只需要覆盖 ModelAdmin 中的 queryset 函数以过滤掉那些不是由请求用户创建的。

    @admin.Register(MyBooks)
    class BooksAdmin(admin.ModelAdmin):
         list_display = [field.name for field in MyBooks._meta.fields]
    
         def get_queryset(self, request):
             qs = super().get_queryset(request)
             return qs.filter(created_by=request.user)
    
        def save_model(self, request, obj, form, change):
             obj.created_by = request.user
             super().save_model(request, obj, form, change)    
    
         class Meta:
             model = MyBooks
    
    
    
     
    

    【讨论】:

    • @Bosha 非常好,我很高兴它对你有用。如果您可以标记为答案,那就太棒了。
    【解决方案2】:

    这里有更多过滤条件。

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.groups.filter(name='useradmin').exists():
            return qs.filter(created_by=request.user)
        else:request.user.groups.filter(name='mainadmin').exists()
        return qs
    

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      相关资源
      最近更新 更多