python - Django 序列化程序不显示子模型字段
问题描述
在另一个序列化程序(外键关系)中使用模型序列化程序时,我的序列化程序没有从子模型返回字段时遇到问题。我不是在寻找解决方案,而是在寻找它为什么不起作用。
模型.py
class LinkedinAccount(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100, blank=True)
date_created = models.DateTimeField(auto_now_add=True)
is_prospect = models.BooleanField(default=False)
class LinkedinProspectAccount(LinkedinAccount):
title = models.CharField(max_length=255, blank=True)
company = models.CharField(max_length=100, blank=True)
country = models.CharField(max_length=255, blank=True)
city = models.CharField(max_length=255, blank=True)
序列化程序.py
class LinkedinAccountSerializer(serializers.ModelSerializer):
class Meta:
model = user_account.models.LinkedinAccount
fields = ('id', 'name')
read_only_fields = ('date_created',)
class LinkedinProspectAccountSerializer(serializers.ModelSerializer):
class Meta:
model = user_account.models.LinkedinProspectAccount
fields = ('title', 'company', 'country', 'city')
read_only_fields = ('date_created',)
class ConversationSerializer(serializers.ModelSerializer):
linkedin_account = user_account.serializers.LinkedinAccountSerializer()
last_message = MessageSerializer()
prospect = user_account.serializers.LinkedinProspectAccountSerializer()
class Meta:
model = conversation.models.Conversation
fields = ('id', 'linkedin_account', 'prospect', 'conversation_id', 'archived',
'last_message')
lookup_field = None
read_only_fields = ('created_at', 'updated_at',)
我从使用 generics.ListCreateAPIView 的正常 GET 请求中得到的是:
[OrderedDict([('id', 1), ('linkedin_account', OrderedDict([('id', 1), ('name', 'Test LinkedIn account')])), ('prospect', OrderedDict( )), ('conversation_id', '100'), ('archived', False), ('last_message', None)])]
前景对象没有字段,如果我在序列化程序中添加基本模型字段,它们会返回,但仍然没有子模型字段。单独使用 LinkedinProspectAccountSerializer 时,它可以正常工作。目前我正在使用它作为解决方法:
def get_prospect(self, obj):
prospect = user_account.models.LinkedinProspectAccount.objects.get(id=obj.prospect.id)
serializer = user_account.serializers.LinkedinProspectAccountSerializer(prospect)
return serializer.data
解决方案
推荐阅读
- environment-variables - 如何防止本地 msmpi 安装加载系统范围的 msmpi.dll
- standards - 了解 R 中的正态分布和标准单位代码
- javascript - 图表 JS 版本 3 未在引擎 wkhtmltopdf 的 pdf 中显示
- java - 正则表达式在开头和之间没有空格,并且只有一个空格
- .net-core - .Net Core 3.1 身份会话即将到期
- node.js - SearchFilterPipe 的模型具有 id 而不是值(关联)
- mysql - MySQL - TypedQuery 忽略构造函数的空值
- sabre - “意外的请求处理错误”是什么意思以及如何解决?
- angular8 - 何通过在函数中传递秒来运行分秒和毫秒计数器
- java - persistence.xml 中 jar 文件的正确路径应该是什么