Как добавить несколько автозаполнения на странице администратора Django - PullRequest
0 голосов
/ 24 сентября 2018

Я использую встроенную функцию для построения автозаполнения для многих полей: https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.autocomplete_fields

У меня есть следующая модель:

 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]

class Department(models.Model):
    name= models.CharField(max_length=100, unique=True)
    def __str__(self):
        return self.name[:50] 

class Location(models.Model):
    description= models.CharField(max_length=100, unique=True)
    def __str__(self):
        return self.description[:50] 

Страница администратора находится здесь:

from django.contrib import admin
from pages.models import  Ipaddress, DeviceGroup, Location,Department,
from django_admin_listfilter_dropdown.filters import DropdownFilter, RelatedDropdownFilter

class IpaddressAdmin(admin.ModelAdmin):
        prepopulated_fields = {'slug': ('ipaddress',)}

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

        list_display = ('ipaddress', 'machinename', 'user', 'department','location','updated',)
        list_filter = (
        ('user', DropdownFilter),
        ('department', RelatedDropdownFilter),
        ('location', RelatedDropdownFilter),

    )

Если я изменяю autocomplete_fields = ['location',], он работает, но не работает, когда я пытаюсь сменить отдел.Также я хочу иметь автозаполнение для отдела и местоположения одновременно.

Ошибка, которую я вижу, это когда я устанавливаю autocomplete_fields = ['department',]

ERRORS:<class 'pages.admin.IpaddressAdmin'>: (admin.E040) ModelAdmin must define    
"search_fields", because it's referenced by 
IpaddressAdmin.autocomplete_fields.

Любая идея, как исправить эту ошибкуЯ хочу что-то вроде этого:

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

1 Ответ

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

В соответствии с документацией, на которую вы ссылались в своей ссылке здесь

Вы должны определить поля search_fields для связанного объекта ModelAdmin, потому что поиск автозаполнения использует его.

Что это означает, в вашем случае, а также из-за ошибки, которую вы получаете, вы должны определить search_fields для связанного объекта (в вашем случае Department и Классы местоположения ModelAdmin, потому что поиск по автозаполнению использует его).

Итак, было бы что-то вроде этого.

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

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

Ваш autocomplete_fields на вашем IPAddressAdmin может быть таким:

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