【问题标题】:how to search in multiple columns using search_fields如何使用 search_fields 在多个列中进行搜索
【发布时间】:2018-09-24 03:46:49
【问题描述】:

我在一个模型中有多个列。我附上截图:

我只能搜索 IP 地址,但我也想搜索部门和位置。知道如何解决这个问题,这是我的 admin.py 的样子:

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','department', 'location',]


        list_display = ('ipaddress', 'machinename', 'user', 'department','location','updated',)
        list_display_links =('ipaddress', 'machinename', 'user', 'department','location','updated',)

#        autocomplete_fields = ['department', 'location',]


        list_filter = (
        ('user', DropdownFilter),
        ('department', RelatedDropdownFilter),
        ('location', RelatedDropdownFilter),

    )
        list_per_page = 100

class DepartmentAdmin(admin.ModelAdmin):
    search_fields = ['name']

class LocationAdmin(admin.ModelAdmin):
    search_fields = ['description']   

以下行给我错误:

search_fields = ['ipaddress','department', 'location',]

我看到的错误是:

C:\Users\mohiuddin_rana\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py",第 1087 行,在 build_lookup raise FieldError('相关字段查找无效:​​{}'.format(lookup_name)) django.core.exceptions.FieldError:相关字段查找无效:​​icontains [23/Sep/2018 23:45:19]“GET /admin/pages/ipaddress/?q=dev HTTP/1.1”500 155606

这是python.py中的IP模型

lass Ipaddress(models.Model):
    ipaddress=models.CharField("Ip Address",max_length=20)
    slug = models.SlugField(unique=True)
    machinename=models.CharField("Machine Name",max_length=500)
    user=models.CharField("User",max_length=200)
    department= models.ForeignKey("Department", on_delete=models.CASCADE)
    location= models.ForeignKey("Location", on_delete=models.CASCADE)
    updated = models.DateField("Date Updated",null=True)
    note =models.TextField()
    class Meta:
       verbose_name = 'IP Management'

    def __str__(self):
        return self.ipaddress[:50]

如何在多列中搜索?

【问题讨论】:

  • 你能发布Ipaddress 模型吗?

标签: python django django-models


【解决方案1】:

在您的 Ipaddress 模型中,locationdepartment 是您要搜索的外键。要在外键字段上指定搜索,您必须将该模型上的字段指定为:

search_fields = ['foreign_key__related_fieldname']

docs 中所述。

如果您想按姓名搜索,则可能是 location__name 和 department__name 。

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 2019-07-19
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多