很长一段时间以来,我们一直在覆盖modeladmin的 formfield_for_foreignkey 要限制查询集,字段可以从中选择。以下是我的意思的简化版本:
formfield_for_foreignkey
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 定义(获得一些精选2肉汁)。结果是,我现在没有将建议视为非超级用户帐户。
autocomplete_fields
有没有更正确的方法来限制查询集,或者这是Django中的一个简单错误?
这需要一个仍在开发中的补丁。你可以耐心,也可以猴子补丁。 AutocompleteJsonView.has_perm 就像我在下面一样。我只是把它固定在设置中。
AutocompleteJsonView.has_perm
如果你还停留在2.0.x上(就像我现在一样 摇拳摇尾 )您还需要确保您的模型管理员定义 has_view_permission .
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