对于任何从外键或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