python - /“产品”对象的 AttributeError 没有属性“get_category_display”
问题描述
嗨,我想在我的产品api
中显示类别名称而不是显示类别 ID。我写了一个函数来为我做这件事,但我有这个错误:
AttributeError at /
'Product' object has no attribute 'get_category_display'
我该如何解决?有我的序列化器和类别和产品模型
序列化器:
class ProductSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField()
category = serializers.SerializerMethodField()
class Meta:
model = Product
fields = ['id', 'category', 'name', 'slug', 'image_1',
'image_2', 'image_3', 'image_4', 'image_5',
'description', 'attribute', 'price', 'available', 'created', 'updated',
'popular', 'discount', 'comments']
lookup_field = 'slug'
extra_kwargs = {
'url': {'lookup_field': 'slug'}
}
def get_comments(self, obj):
comments_qs = Comment.objects.filter_parents_by_object(obj).order_by('posted')
return CommentSerializer(comments_qs, many=True).data
def get_category(self, obj):
return obj.get_category_display()
楷模:
class Category(models.Model):
name = models.CharField(max_length=400)
def __str__(self):
return self.name
class Product(models.Model):
category = models.ManyToManyField(Category, related_name='products')
name = models.CharField(max_length=500)
slug = models.SlugField(max_length=500, allow_unicode=True, unique=True)
image_1 = models.ImageField(upload_to='products_pic/%Y/%m/%d/', null=True, blank=True)
description = models.TextField(null=True, blank=True)
attribute = models.JSONField(null=True, blank=True,
help_text='in this format: {"key" : "value", "key2" : "value2"}')
price = models.PositiveIntegerField()
discount = models.PositiveIntegerField(null=True, blank=True)
available = models.BooleanField(default=True)
comments = GenericRelation(Comment)
class Meta:
ordering = ('-created',)
def __str__(self):
return self.name
解决方案
只有具有选项列表的字段具有,您可以使用以下方式显示对象的名称:get_fieldname_display
def get_category(self, obj):
return [str(c) for c in obj.category.all()]
或者如果Category
模型具有例如一个.name
字段,您可以使用:
def get_category(self, obj):
return [c.name for c in obj.category.all()]
推荐阅读
- c# - 使用 C# 记录错误
- python - Numpy issubdtype 给出“TypeError:数据类型不理解”
- powershell - 自动化 SQL DataWareHouse(暂停和恢复)
- java - 在 Java 中将 singed int 转换为 uint
- arrays - MATLAB 上 for 循环中的数组索引
- reactjs - 'react-i18next: withNamespaces is not a function' 测试时
- angular - Angular中的双向数据绑定没有自动完成功能?
- list - F# 返回列表长度列表
- admob - Flutter:具有真实 AdUnitId 的 Admob Ios 奖励视频不起作用,但与 testid 一起使用
- vue.js - Nuxt 默认模板生成两倍于 Vuejs 大小的静态资源