问题描述
你能帮我看看 Django rest 框架中泛型关系的序列化吗?我需要获取 SWOT 对象的数据,包括公司及其所有评论。我在检索通用字段评论时遇到问题。
models.py:
class SWOT(models.Model):
name = models.CharField(max_length=500,default='')
description = models.CharField(max_length=500,default='',blank=True)
company = models.ForeignKey(Company,on_delete=models.CASCADE)
#Generic Relation for comments
comments = GenericRelation(Comment)
def __str__(self):
return self.name
class Comment(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
text = models.TextField(verbose_name="")
created_date = models.DateTimeField(default=timezone.Now)
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
views.py:
class SwotView(generics.ListAPIView):
serializer_class = SwotSerializer
def get_queryset(self):
swot_id = self.kwargs['swot_id']
return SWOT.objects.filter(id=swot_id)
serializers.py:
class CommentRelatedField(serializers.RelatedField):
def to_representation(self,value):
if isinstance(value,SWOT):
serializer = SwotSerializer(value)
else:
raise Exception('Unexpected type of comment ',type(value))
return serializer.data
class SwotSerializer(serializers.ModelSerializer):
company = CompanySerializer()
comments = CommentRelatedField(many=True,queryset=Comment.objects.all())
class Meta:
model = SWOT
fields = ('id','name','description','company','comments')
我已尝试实现 documentation 中示例中的代码,但我解决了错误。不知道为什么对象的类型是Comment而不是SWOT。
你能告诉我我能做些什么来使这段代码像在文档中一样工作,或者提出另一种解决方案,如文档建议的常规关系字段。
请注意,使用 GenericRelation 字段表示的反向通用键可以使用常规关系字段类型进行序列化,因为关系中的目标类型始终是已知的。
提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)