python - 如何序列化 Django ManyToMany 字段中的特定字段?
问题描述
所以,我正在尝试为我的项目使用 Django Rest Framework。我有两个模型Category
,Content
要序列化,如下:
views.py
class Category(models.Model):
category_name = models.CharField(max_length = 20)
def __str__(self):
return self.category
class Content(models.Model):
category = models.ManyToManyField(Category)
body = models.TextField(blank=True, null=True)
created_at = models.DateField(auto_now_add=True, null=True)
def __str__(self):
return self.created_at
序列化程序.py
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ['category_name']
class ContentSerializer(serializers.ModelSerializer):
class Meta:
model = Content
fields = [
'category', 'body', 'created_at',
]
现在的问题是,返回的 JSON 对象包含 中id
的每个对象Category
,而不是category_name
. 因此,当我在前端 console.log 时,我得到了(例如)[1, 4, 8]
但我需要的是(例如)['Wine', 'Beer', 'Whiskey']
。
我怎样才能做到这一点?提前致谢 :)
解决方案
你需要检查一下StringRelatedField
我认为。
https://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield
__str__
您可以序列化模型中方法中定义的相关字段。
您还可以序列化该字段中的每个项目,例如:
{ id: 1, name: 'category name' }
您需要检查嵌套的序列化程序是否已完成:
https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
例如:
你需要类似嵌套序列化器的东西,你可以从那里检查它:
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = ("id", "name", ) # You can specify whatever fields you want here.
class ContentSerializer(serializers.ModelSerializer):
category = CategorySerializer() # many=True if you want
class Meta:
model = Content
fields = ("id", "category", "body", )
我想你想要的是StringRelatedField
,返回字段哟。第二个,嵌套关系是额外的
推荐阅读
- python - 我创建了一个机器人可以改变我的角色,但它会出错
- javascript - 在 2 秒后删除 Click 事件上的 preventDefault()
- navbar - 制作可变导航栏
- javascript - 如何从数据库实时更新 Plotly.js 图表?
- linux - 错误 [内部] 为 docker.elastic.co/elasticsearch/elasticsearch:7.12.0 加载元数据
- c++ - 尝试通过放入向量对地图值进行排序时出现令人讨厌的难以理解的错误
- docker - 如何通过 axios 正确调用另一个 docker 容器?
- python - 如果值存在于其他 df 中,则删除行
- azure - 在 Azure Databricks Notebook 中触发外部网站以进行 PowerBi 刷新
- android - 错误:启用视图绑定android时,包android.view不存在