Django ModelAdmin.get_formsets_with_inlines,以限制特定于当前用户/所有者的数据

时间:2019-03-14 11:46:27

标签: python django

为了将主要模型数据的访问权限限制为当前登录的用户,我在admin.py中使用了类似于以下内容的查询集:

@admin.register(MyModel)
class MyModel(admin.ModelAdmin):
def get_queryset(self, request):
   qs = super().get_queryset(request)
   if request.user.is.superuser:
        return qs
   return qs.filter(resource_owner=request.user)
...

Owner是存储当前登录用户的字段的名称,它的工作原理就像一个超级按钮! 但是,这显然不适用于内联。

我已经搜索了文档,并且(可能是错误的)理解可以使用ModelAdmin.get_formsets_with_inlines来实现这一目标。作为受训者,我不确定如何将这个表单集限制为仅对所有者内联模型数据进行访问,就像将上述查询集应用于主模型一样。

文档在以下引用为:

For example if you wanted to display a particular inline only in the change view, you could override get_formsets_with_inlines as documentedfollows:

    class MyModelAdmin(admin.ModelAdmin):
        inlines = [MyInline, SomeOtherInline]

        def get_formsets_with_inlines(self, request, obj=None):
            for inline in self.get_inline_instances(request, obj):
                # hide MyInline in the add view
                if not isinstance(inline, MyInline) or obj is not None:
                    yield inline.get_formset(request, obj), inline

我尝试应用上述表单集,但是对于解决这个问题太缺乏经验了。如果有人可以协助我如何将表单集应用于内联并将数据限制为所有者,我将不胜感激。除此以外,我的新手应用程序中的其他所有内容都可以正常工作。

为澄清起见,所有者是我的内联模型中存储当前登录用户的字段,但没有表单集限制数据,用户当前可以看到内联模型中每个人保存的数据。

谢谢。

0 个答案:

没有答案