restframework如何序列化一个通用外键

评论的模型是这么定义的

class Comment(models.Model):

user = models.ForeignKey(settings.AUTH_USER_MODEL,default=1,on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType,on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type','object_id')
parent = models.ForeignKey('self',null=True,blank=True,on_delete=models.CASCADE)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
objects = CommentManager()

这里面有个content_object字段是个通用外键,我也是个新手刚刚学习,不知道这个外键的作用是什么的,然后我在用户详情里面顺带查了一下这个相对应的评论

class UserDetailSerializer(serializers.ModelSerializer):


userName = SerializerMethodField()
detail = SerializerMethodField()
comments = SerializerMethodField()
class Meta:
    model = User
    fields = (
        'userName',
        'sex',
        'age',
        'detail',
        'comments'
    )
def get_userName(self,obj):
    return obj.name
def get_detail(self,obj):
    try:
        detail = obj.detail != 'False' if True else None
    except:
        detail = None
    return detail

def get_comments(self,obj):
    content_type = obj.get_content_type
    id = obj.id
    comments_queryset = Comment.objects.filter_by_instance(obj)
    comments = CommentSerializer(comments_queryset,many=True).data
    return comments
            
            
            
            
            
            最后我在这个序列化评论模型的地方加上了content_object这个字段就会报错
            class CommentSerializer(serializers.ModelSerializer):
reply_count = SerializerMethodField()
class Meta:
    model = Comment
    fields = (
        'id',
        'user',
        'content_type',
        'object_id',
        'parent',
        'content',
        'reply_count'
    )
def get_reply_count(self,obj):
    if obj.is_parent:
        return obj.children().count()
    return 0

如果去掉这个content_object字段就不会报错,加上就会报一个Object of type 'User' is not JSON serializable

这个问题怎么解决啊,最后查出来的结果就是content_object这个字段是一个User模型。。。。。这咋回事。。。。谁能救我

阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题