python - Django Serializer 显示“字符”:“字典对象 (256)”,而不是实际字符
问题描述
我正在使用 Django 休息框架,我正在尝试对 GET 命令执行 JOIN。
我有以下看法:
class CharacterView(APIView):
permission_classes = (AllowAny,)
def get(self, request, user_id):
character_saves = Char.objects.select_related('character').filter(
user_id=user_id)
serializer = CharacterSerializer(character_saves, many=True)
return Response({"characters": serializer.data})
以及以下序列化程序:
class CharacterSerializer(serializers.Serializer):
character_id = serializers.IntegerField()
user_id = serializers.IntegerField()
active = serializers.BooleanField()
character = serializers.CharField()
def create(self, validated_data):
return Char.objects.update_or_create(
user_id=validated_data.pop('user_id'),
character_id=validated_data.pop('character_id'),
defaults=validated_data
)
然而,我得到以下数据:
"characters": [
{
"character_id": 256,
"user_id": 1,
"active": true,
"character": "Dictionary object (256)"
},
{
"character_id": 260,
"user_id": 1,
"active": true,
"character": "Dictionary object (260)"
}
]
它没有给我我想要的实际项目,而是给了我一个字典对象。这几乎是正确的,但是我猜我在查询或序列化程序中配置了错误,从而阻止了我获取原始值。
我如何在这里获得实际值,而不是“字典对象(260)”?
字符模型:
class Char(models.Model):
character = models.ForeignKey(
Dictionary, on_delete=models.CASCADE)
user = models.ForeignKey(
User, on_delete=models.CASCADE)
active = models.BooleanField()
字典型号:
class Dictionary(models.Model):
traditional = models.CharField(max_length=50)
simplified = models.CharField(max_length=50)
pinyin_numbers = models.CharField(max_length=50)
pinyin_marks = models.CharField(max_length=50)
translation = models.TextField()
level = models.IntegerField()
class Meta:
db_table = 'dictionary'
解决方案
tredzko 的回答是正确的,但是你在评论框中问过you like to put several fields from dictionary into the serialized output
,所以对于那部分你可以这样做,
Class DictionarySerializer(models.Model):
class Meta:
model = Dictionary
fields = (....) # Your specified fields goes here
class CharacterSerializer(serializers.Serializer):
character_id = serializers.IntegerField()
user_id = serializers.IntegerField()
active = serializers.BooleanField()
character = DictionarySerializer() # simply add this
编辑:无需重写该create
方法。
推荐阅读
- azure - 是否有用于在测试或 CI 环境中运行的 docker 映像来代替 Azure 事件中心?
- php - 将countif mysql查询表显示为html
- java - 如何使用 Graphics 在整齐的列中打印 Java 数组?
- c - 为什么非整数输入会导致无限循环?
- c - 无法确定按位运算背后的原因
- python - GUI部分有效,为什么我得到“y = x [“main”] KeyError:'main' python”
- c - 根据当前最高 ID 为结构设置 ID
- node.js - Authorize.net 添加新的 paymentProfile 时出错 - 代码:E00114,无效的 OTS 令牌
- symfony - symfony 4 配置默认值(无文件)
- python - 从 Pipfile 中删除固定版本的正则表达式是什么?