use*_*098 5 python django django-forms django-admin
如何在Django管理员中创建高级自定义搜索表单并使用Django管理员更改列表显示.我的高级搜索表单有几个字段,包括:
admin.py:
class PropertyAdmin(ModelAdmin):
change_list_template = "property/admin/property_change_list.html"
list_per_page = 20
list_display_links = ('property_country_province_city',)
search_fields = ('id',)
list_filter = ('is_sale','is_rent','is_presales','estate_type','water')
list_display_links = ('property_type',)
Run Code Online (Sandbox Code Playgroud)
Models.py
class Property(models.Model):
objects = PublicPropertyManager()
title = models.CharField(_("title"), max_length = 80, blank=True)
country = models.ForeignKey(Country, verbose_name=_("Country"))
province = models.ForeignKey(Province, verbose_name=_("Province"))
city = models.ForeignKey(City, verbose_name=_("City"))
region = models.ForeignKey(Region, verbose_name=_("Region"))
address = models.CharField(
verbose_name=_("address"), max_length = 250, blank=True, null=True
)
Run Code Online (Sandbox Code Playgroud)
我不确定您是否意味着您已经编写了自定义搜索,但在这种情况下,根据您想要执行的操作,您可能不需要它。您可以通过默认值搜索相关模型字段,search_fields但需要注意的是,这将生成相关的查找/联接。
我不确定City、Province、 和Region是什么样子,但假设它们有一个name字段,这应该可行(如果它们有一个id字段,则这只是province__id等):
# admin.py
class PropertyAdmin(ModelAdmin):
...
search_fields = (
'region__name',
'city__name',
'province__name',
)
Run Code Online (Sandbox Code Playgroud)
请注意,如果您渲染 中的任何一个ForeignKeys,list_display您可能希望覆盖查询集以select_related在您显示的任何字段上使用,以避免生成大量不必要的 SQL 查询:
# admin.py
class PropertyAdmin(ModelAdmin):
...
def get_queryset(self, request);
qs = super(PropertyAdmin, self).get_queryset(request)
return qs.select_related('province', 'city', 'region',)
Run Code Online (Sandbox Code Playgroud)
PS 它看起来也像您list_display_links在那里定义了两次,因此第二个定义将覆盖第一个定义,这可能不是您想要的行为。
| 归档时间: |
|
| 查看次数: |
1391 次 |
| 最近记录: |