我有以下型号
from django.db import models
class Ipaddress(models.Model):
ipaddress=models.CharField(max_length=20)
slug = models.SlugField(unique=True)
machinename=models.CharField(max_length=500)
user=models.CharField(max_length=200)
department= models.ForeignKey('Department',on_delete=models.CASCADE,default='Empty')
location= models.ForeignKey('Location', on_delete=models.CASCADE)
updated = models.DateField("Date Updated",null=True)
note =models.TextField()
def __str__(self):
return self.ipaddress[:50]
在管理页面中:
from django.contrib import admin
from pages.models import Post, Device, DeviceType, DeviceModel, Ipaddress, DeviceGroup, Location,Department,Comment
from django_admin_listfilter_dropdown.filters import DropdownFilter, RelatedDropdownFilter
class IpaddressAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('ipaddress',)}
search_fields = ['ipaddress', ]
list_display = ('ipaddress', 'machinename', 'user', 'department','location','updated',)
list_filter = (
('user', DropdownFilter),
('department', RelatedDropdownFilter),
('location', RelatedDropdownFilter),
)
当我尝试添加设备时,它显示以下页面: 列表的位置可能是几千个机架。因此,我需要键入机架而不是滚动1000条记录。任何想法我怎么做。
答案 0 :(得分:0)
在有人共享复杂的解决方案之前,我建议您将 ForeignKey 位置添加到search_fields中,例如:
search_fields = ['foreign_key__related_fieldname']
因此,如果您的“位置名称”是在您的位置模型中使用“标题”字段定义的,则可以这样做:
from django.contrib import admin
from .models import Ipaddress
class IpaddressAdmin(admin.ModelAdmin):
search_fields = ['ipaddress', 'location__title']
admin.site.register(Ipaddress, IpaddressAdmin)
注意:在此示例中,将其简化为基本内容,假设该内容位于app / admin.py中,并且Ipadress模型位于app / models.py
这真的很方便,因为django admin分解了多个搜索词(由空格分隔),因此您可以搜索“ ip位置”,例如:
127.0.0.1瑞典
它将同时搜索您的“ ipadress”字段和外键“ Location”。
优点:
缺点:
Django 2.1文档:ModelAdmin.search_fields