代码之家  ›  专栏  ›  技术社区  ›  Oli

Django 2自动完成字段上的限制查询集

  •  0
  • Oli  · 技术社区  · 6 年前

    很长一段时间以来,我们一直在覆盖modeladmin的 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肉汁)。结果是,我现在没有将建议视为非超级用户帐户。

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Oli    6 年前

    这需要一个仍在开发中的补丁。你可以耐心,也可以猴子补丁。 AutocompleteJsonView.has_perm 就像我在下面一样。我只是把它固定在设置中。

    如果你还停留在2.0.x上(就像我现在一样 摇拳摇尾 )您还需要确保您的模型管理员定义 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