как искать в нескольких столбцах, используя search_fields - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть несколько столбцов в модели.Я прилагаю скриншот: enter image description here

Я могу искать только 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поднять 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

Вот модель IP в python.py

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]

Как искать в нескольких столбцах?

1 Ответ

0 голосов
/ 24 сентября 2018

В вашей модели Ipaddress location и отдела - это внешние ключи, по которым вы хотите выполнить поиск.Чтобы задать поиск по полю внешнего ключа, вы должны указать поле этой модели как:

search_fields = ['foreign_key__related_fieldname']

, как указано в документах .

В вашем случае это можетбыть location__name и отдела__name, если вы хотите искать по их именам.

...