Django list_select_related 给我这个错误
Django list_select_related gives me this error
#store/admin.py
@admin.register(models.Product)
class ProductView(admin.ModelAdmin):
list_display = ['title', 'unit_price', 'inventory_status', 'collection_title',]
list_editable = ['unit_price']
list_per_page = 10
list_select_related = ['collection']
#store/models.py
class Collection(models.Model):
title = models.CharField(max_length=255)
featured_product = models.ForeignKey(
'Product', on_delete=models.SET_NULL, null=True, related_name='+')
class Meta:
ordering = ['title']
'''
def __str__(self) -> str:
return self.title
'''
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
description = models.TextField()
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
inventory = models.IntegerField()
last_update = models.DateTimeField(auto_now=True)
collection = models.ForeignKey(Collection, on_delete=models.PROTECT)
promotions = models.ManyToManyField(Promotion)
#我得到的错误:
SystemCheckError
PS - 我知道我可以直接在 list_display 中使用 'collection',因为它已经是我的产品模型中的一个字段,但我想预加载一个使用 list_select_related 相关 field/table 并在 list_display 中使用 'collection_title'。请帮忙。谢谢。
错误:
: (admin.E108) 'list_display[3]' 的值是指 'col
lection_title',它不是可调用的,不是 'ProductView' 的属性,也不是 'store.Product'.
上的属性或方法
我认为你错了,据我所知list_select_related
是为了减少你的查询,但你的错误是别的,这里说“list_display[3]”指的是colection_title
,不是模型的属性或可调用方法
产品或 ProductView class.
django validate this items(list_display) 在下面的link中可以看到validate函数(_check_list_display):
https://github.com/django/django/blob/950d697b95e66deb3155896e0b619859693bc8c6/django/contrib/admin/checks.py#L732
如果你想访问其他模型中的相关字段,你可以在你的 ProductView 中创建一个函数 link this:
class ProductView(admin.ModelAdmin):
list_display = ['title', 'unit_price', 'inventory_status', 'collection_title',]
list_editable = ['unit_price']
list_per_page = 10
list_select_related = ['collection']
def collection_title(self, obj):
return obj.collection.title
#store/admin.py
@admin.register(models.Product)
class ProductView(admin.ModelAdmin):
list_display = ['title', 'unit_price', 'inventory_status', 'collection_title',]
list_editable = ['unit_price']
list_per_page = 10
list_select_related = ['collection']
#store/models.py
class Collection(models.Model):
title = models.CharField(max_length=255)
featured_product = models.ForeignKey(
'Product', on_delete=models.SET_NULL, null=True, related_name='+')
class Meta:
ordering = ['title']
'''
def __str__(self) -> str:
return self.title
'''
class Product(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
description = models.TextField()
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
inventory = models.IntegerField()
last_update = models.DateTimeField(auto_now=True)
collection = models.ForeignKey(Collection, on_delete=models.PROTECT)
promotions = models.ManyToManyField(Promotion)
#我得到的错误: SystemCheckError
PS - 我知道我可以直接在 list_display 中使用 'collection',因为它已经是我的产品模型中的一个字段,但我想预加载一个使用 list_select_related 相关 field/table 并在 list_display 中使用 'collection_title'。请帮忙。谢谢。
错误:
我认为你错了,据我所知list_select_related
是为了减少你的查询,但你的错误是别的,这里说“list_display[3]”指的是colection_title
,不是模型的属性或可调用方法
产品或 ProductView class.
django validate this items(list_display) 在下面的link中可以看到validate函数(_check_list_display): https://github.com/django/django/blob/950d697b95e66deb3155896e0b619859693bc8c6/django/contrib/admin/checks.py#L732
如果你想访问其他模型中的相关字段,你可以在你的 ProductView 中创建一个函数 link this:
class ProductView(admin.ModelAdmin):
list_display = ['title', 'unit_price', 'inventory_status', 'collection_title',]
list_editable = ['unit_price']
list_per_page = 10
list_select_related = ['collection']
def collection_title(self, obj):
return obj.collection.title