限制Django 2 autocomplete_field上的queryset [英] Limit queryset on Django 2 autocomplete_field
问题描述
很长一段时间以来,我们一直在重写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屋!