Ore*_*gel 10 python django django-admin django-2.0
在Django 2.0中,添加了autocomplete_fields,这很棒.
如果没有autocomplete_fields,我可以使用formfield_for_foreignkey更改ForeignKeyField的查询集.
但是将两者结合在一起并不起作用 - 看起来自动完成的选项列表是动态的,来自不同的URL,而不是来自当前的表单.
所以问题是 -
如何更改自动完成小部件中的查询集?
小智 9
如果您使用autocomplete_fieldsfor ManyToManyField'self',则此示例将排除当前对象。
通过覆盖获取当前对象的 id get_form:
field_for_autocomplete = None
def get_form(self, request, obj=None, **kwargs):
if obj:
self.field_for_autocomplete = obj.pk
return super(MyAdmin, self).get_form(request, obj, **kwargs)
Run Code Online (Sandbox Code Playgroud)
接下来,覆盖get_search_results. 仅为模型的自动完成 URI 修改查询集:
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
# Exclude only for autocomplete
if request.path == '/admin/myapp/mymodel/autocomplete/':
queryset = queryset.exclude(field=self.field_for_autocomplete)
return queryset, use_distinct
Run Code Online (Sandbox Code Playgroud)
覆盖 ModelAdmin 的get_search_results方法以使用您想要的查询。您可以在为get_queryset用于获取查询集的自动完成字段提供数据的视图方法中看到- 此答案的来源是https://github.com/django/django/blob/03dbdfd9bbbbd0b0172aad648c6bbe3f39541137/django/contrib/管理员/视图/自动完成.py#L42。
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |