Как сделать так, чтобы автозаполнение_полей искало в строковом представлении модели в Django 3

Поскольку я использую строковое представление модели, оно также отображается в автозаполнении_поля (Select2). Но проблема в том, что когда я пытаюсь выполнить поиск в поле, он выполняет поиск в поле имени модели, а не в строковом представлении. Вот пример моего кода:

models.py

class Store(models.Model):
    name = models.CharField(max_length=256)



class Department(models.Model):
    name = models.CharField(max_length=256)
    store = models.ForeignKey(Store, on_delete=models.CASCADE)


class Shelf(models.Model):
    name = models.CharField(max_length=256)
    department = models.ForeignKey(Department, on_delete=models.CASCADE)

    def __string__(self):
        return f'{self.department.store.name} {self.department.name} {self.name}'

class Product(models.Model):
    name = models.CharField(max_length=256)
    shelf = models.ForeignKey(Shelf, on_delete=models.CASCADE)

admin.py

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    autocomplete_fields = ('shelf',)
    list_display = ('name', 'shelf')

Возможен ли в этом случае поиск по строковому представлению модели?

Прежде всего, ваш строковый метод должен быть __str__, а поскольку метод str не является полем, вы не можете добавить его в поле автозаполнения, поскольку он ищет поле и работает на уровне БД. Что вы можете сделать, так это:

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    autocomplete_fields = ('shelf__department__store__name','shelf__department__name','name')
    list_display = ('name', 'shelf')
Вернуться на верх