仅显示管理员添加到数据库的内容 django admin

show only what admin add to DB django admin

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

model.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

只需要重写您的 ModelAdmin 中的查询集函数,以过滤掉那些不是由请求用户创建的。

@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



 

这里还有更多过滤条件

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