{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
的^{
但我找不到一种方法来确定搜索请求来自哪个自动完成字段。因此,我只能对其进行编程以满足一个引用ModelAdmin
的需要。在
如何正确限制自动完成字段的queryset?在
您可以重写
static/admin/js/autocomplete.js
中的Djangoautocomplete.js
静态文件。Django总是喜欢您覆盖的文件。在然后在覆盖的文件中修改
^{1}$djangoAdminSelect2()
函数,如下所示:并且
^{pr2}$init()
函数如下:{{cd6>然后在请求中获得{cd6}参数。在
当然,您可以使JS看起来更好,但原则上它是这样工作的。在
相关问题 更多 >
编程相关推荐