如何在Wagtail管理创建表单中为fk或m2m字段返回查询集?

时间:2019-08-19 08:22:58

标签: django-forms django-queryset wagtail

对于任何从外键或M2M关系返回选择选项的w面板,我的问题都适用。

如何过滤服务器端的选项列表,使用户仅看到他有权访问的信息?

我有一个计划模型。创建新计划时,我希望request.user仅查看他隶属的公司列表。

from modelcluster.models import ClusterableModel
from wagtailautocomplete.edit_handlers import AutocompletePanel


class Plan(ClusterableModel):
    created_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.PROTECT,
        blank=True,
    )
    company = models.ForeignKey(
        "home.HomePage", on_delete=models.PROTECT,
    )

    edit_panels = [
        AutocompletePanel("company", target_model="company.Company"),
    ]


class PlanAdmin(ModelAdmin):
    model = Plan

    def get_queryset(self, request: HttpRequest) -> QuerySet:
        qs = super().get_queryset(request)
        if request.user.is_staff or request.user.is_superuser:
            return qs
        # Only show plans for the current user
        return qs.filter(created_by=request.user)

当前,我的“公司”面板将返回数据库中现有的所有公司。 我只想显示与请求当前用户有关的公司,即可以通过request.user.get_companies()获得的信息(返回公司查询集)。

W样式,我认为Panel可以具有一些属性来设置查询集。或某些ModelAdmin方法。 Django风格,我将以表单的形式进行。由于我无法解决w问题的问题,因此我将研究如何使用在添加到PlanAdmin.create_view_class

的自定义CreateView中设置的自定义表单来完成这项工作。

相关:github question to Wagtail-autocomplete

0 个答案:

没有答案