限制Django 2 autocomplete_field上的queryset [英] Limit queryset on Django 2 autocomplete_field

查看:154
本文介绍了限制Django 2 autocomplete_field上的queryset的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很长一段时间以来,我们一直在重写ModelAdmin的 formfield_for_foreignkey 以限制该字段可以选择的查询集。这是我的意思的简化版本:

For a long time we've been overriding our ModelAdmin's formfield_for_foreignkey to limit the queryset the field can choose from. Here's a simplified version of what I mean:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "site":
        if not request.user.is_superuser:
            kwargs["queryset"] = request.user.site

但是我最近将此字段添加到了 autocomplete_fields 定义中(以获得一些Select2肉汁)。结果是作为非超级用户帐户,我现在没有任何建议。

But I recently added this field to the autocomplete_fields definition (to get some Select2 gravy). The result was I now see no suggestions as a non-superuser account.

是否有一种更正确的方法来限制查询集,或者这是Django中的简单错误?

Is there a more right way to limit the queryset, or is this a simple bug in Django?

推荐答案

这需要一个仍在dev中的补丁。您可以耐心等待,也可以猴子补丁 AutocompleteJsonView.has_perm ,如下所示。我只是将其卡在设置中。

This needs a patch that's still in dev. You can be patient, or you can monkey-patch AutocompleteJsonView.has_perm as I am below. I just stuck this in settings.

如果您还停留在2.0.x上(因为我目前在Wagtail握拳),还需要确保您的ModelAdmins定义了 has_view_permission

If you're also stuck on 2.0.x (as I currently am shakes fist at Wagtail) you'll also need to make sure your ModelAdmins define a has_view_permission.

from django.contrib.admin.views.autocomplete import AutocompleteJsonView
def ac_has_perm(self, request, obj=None):
    return self.model_admin.has_view_permission(request, obj=obj)
AutocompleteJsonView.has_perm = ac_has_perm

这篇关于限制Django 2 autocomplete_field上的queryset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆