如何在django admin中限制内联模型的查询集

kri*_*nan 11 python django inline django-queryset django-admin-filters

我有两个模型实现像

class A(models.Model):
    a_name = models.CharField(max_length=50)

class B(models.Model):
    a = models.ForeignKey(A)
    b_tag = models.CharField(max_length=50)
    user=models.ForeignKey(User)             # stores username
Run Code Online (Sandbox Code Playgroud)

现在我定义一个A管理员并将其注册为B作为TabularInline的子类.我想知道是否有可能以某种方式在呈现内联formset之前过滤B对象列表,因此并非所有B对象都相关做A进入formset只显示其用户参数与当前登录用户匹配的用户!

noa*_*amk 22

使用get_queryset方法:https://docs.djangoproject.com/en/stable/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

应该是这样的:

class BAdmin(admin.TabularInline):
    ...

    def get_queryset(self, request):
        qs = super(BAdmin, self).get_queryset(request)
        return qs.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)