Как сделать так, чтобы автозаполнение_полей искало в строковом представлении модели в 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')