限制Djang中自动完成字段的查询集

2024-10-02 12:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

{Django.1>像这样

class BoxAdmin(admin.ModelAdmin):
    autocomplete_fields = ['testkit']

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'testkit':
            kwargs['queryset'] = Barcode.objects.exclude(testkit__in=Box.objects.all().values('testkit'))
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

formfield_for_foreignkey方法是为“传统”外键字段编写的。对于autocomplete字段,它确保在选择queryset之外的testkit时显示错误。但是它不限制在自动完成字段中找到的结果。documentation没有提到自定义查询集的任何限制。This answer是相关的,但只处理授权。在

可以重写相关的ModelAdmin^{}方法。在

^{pr2}$

但我找不到一种方法来确定搜索请求来自哪个自动完成字段。因此,我只能对其进行编程以满足一个引用ModelAdmin的需要。在

如何正确限制自动完成字段的queryset?在


Tags: 方法fieldfordbobjectsrequestautocompletekwargs
1条回答
网友
1楼 · 发布于 2024-10-02 12:23:22

您可以重写static/admin/js/autocomplete.js中的Djangoautocomplete.js静态文件。Django总是喜欢您覆盖的文件。在

然后在覆盖的文件中修改djangoAdminSelect2()函数,如下所示:

^{1}$

并且init()函数如下:

^{pr2}$

{{cd6>然后在请求中获得{cd6}参数。在

当然,您可以使JS看起来更好,但原则上它是这样工作的。在

相关问题 更多 >

    热门问题