python - django rest 框架序列化程序给出“serializers.Language.None”
问题描述
这是我的serializers.py
class GetCompanySerializer(serializers.ModelSerializer):
language = serializers.CharField()
class Meta:
model = Company
fields = ('company_name','started_from','country','email','website','ip','active','language')
这是我的意见.py
class CompanyView(viewsets.ModelViewSet):
queryset = Company.objects.all()
serializer_class = CompanySerializer
def get_serializer_class(self):
serializer_class = self.serializer_class
if self.request.method == 'GET':
serializer_class = GetCompanySerializer
return serializer_class
这是我的models.py
class Company(models.Model):
company_id = models.BigAutoField(primary_key=True)
company_name = models.CharField(max_length=255)
started_from = models.DateTimeField(auto_now=True)
country = models.CharField(max_length=255)
email = models.EmailField(max_length=254)
website = models.URLField()
ip = models.GenericIPAddressField(default=get_ip(),null=True,blank=True)
active = models.BooleanField(default=True)
def __str__(self):
return self.company_name
class Language(models.Model):
language_id = models.BigAutoField(primary_key=True)
language_name = models.CharField(max_length=255)
language_logo = models.FileField()
created_on = models.DateTimeField(auto_now=True)
latest_build_on = models.DateTimeField(auto_now_add=True)
latest_version = models.DecimalField(max_digits=5, decimal_places=2)
company = models.ForeignKey('Company',on_delete=models.CASCADE,related_name='language')
def __str__(self):
return self.language_name
给api:
[
{
"company_name": "Guido van dom rossum",
"started_from": "2018-10-03T04:58:54.889132Z",
"country": "Netherland",
"email": "help@python.com",
"website": "https://python.org",
"ip": "127.0.0.1",
"active": true,
"language": "serializers.Language.None"
}
]
它应该为它提供“serializers.Language.None”的语言字段位提供语言名称。
请看看这个..
解决方案
由于language
是反向关系,因此不应该是CharField
. 所以你必须定义一个LanguageSerializer()
并将其映射到你GetCompanySerializer
的如下,
class LanguageSerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = Language
class GetCompanySerializer(serializers.ModelSerializer):
language = LanguageSerializer(many=True)
class Meta:
model = Company
fields = ('company_name', 'started_from', 'country', 'email', 'website', 'ip', 'active', 'language')
如果您希望获得模型的__str__()
表示Language
,请使用StringRelatedField()
而不是CharField()
class GetCompanySerializer(serializers.ModelSerializer):
language = serializers.StringRelatedField(many=True)
class Meta:
model = Company
fields = ('company_name', 'started_from', 'country', 'email', 'website', 'ip', 'active', 'language')</code></pre>
推荐阅读
- java - 如何获得地板计算的最终结果?
- css - 使用 Grid 定位元素的问题
- python - 行索引超过了 scipy csr_matrix 的矩阵维度
- html - 如何使用 Mailx 或 Mutt 在电子邮件正文中显示 Html 表格数据
- mysql - 我对同一个表有两个查询,我加入了不同的分组
- objective-c - 如何在实现文件中引用成员变量
- angular - 角度注入令牌
- angular - 如何使事件仅在应用程序加载Angular 8的第一次发生
- ios - 使用 AVAssetDownloadTask 播放时缓存 HLS 视频
- python - Django - 过滤相关对象