如何在 Django 3 中的模型字符串表示中进行autocomplete_fields搜索



当我使用模型的字符串表示时,它也显示在autocomplete_fields(Select2(中。但问题是,当我尝试在字段中搜索时,它搜索的是模型的名称字段,而不是字符串表示。这是我的代码示例:

型号.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方法不是字段,所以您不能将其添加到自动完成字段中,因为它查找字段并在DB级别上工作。你能做的是:

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

最新更新