Django 获取ForeignKey表的其他字段?

我正在做一个评论功能,文章页面加载后,通过AJAX Get当前文章的评论列表。
评论Comment类,外键关联了author和article两个类。通过models.Comment.objects.filter获取文章评论列表时,返回的是作者author的主键,也就是id,无法直接获取author的名字。如何获取评论列表和作者名字比较好?

model

class Comment(models.Model):
    body = models.TextField('正文', max_length=500)
    created_time = models.DateTimeField('创建时间', default=now)
    last_mod_time = models.DateTimeField('修改时间', default=now)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE)

    article = models.ForeignKey(Article, verbose_name='文章', on_delete=models.CASCADE)
    parent_comment = models.ForeignKey('self', verbose_name="上级评论", blank=True, null=True, on_delete=models.CASCADE)
    is_approved = models.BooleanField('是否审批通过', default=True, blank=False, null=False)
    is_enabled = models.BooleanField('是否显示', default=True, blank=False, null=False)
    is_deleted = models.BooleanField('是否被删除', default=True, blank=False, null=False)

view视图,通过models.Comment.objects.filter获取文章的所有评论

def get_comment_list(request, article_id):
    if request.GET:
        comment_list = models.Comment.objects.filter(article_id = article_id)
        data = serializers.serialize('json',comment_list)
        return HttpResponse(data, content_type="application/json")
JsonResponse({'success':True,'message':'Success','comment_list':comment_list})
        pass
    else:
        PermissionDenied('Not accept post')
阅读 4.3k
1 个回答

通过以下方式访问到了外键Author的所有字段

def get_comment_list(request, article_id):
    if request.GET:
        comment_list = models.Comment.objects.filter(article_id = article_id)
        comment_item_list = []
        for comment in comment_list:
            comment_item = {}
            comment_item['body'] = comment.body
            comment_item['parent'] = comment.parent_comment
            comment_item['created_time'] = comment.created_time
            comment_item['author_name'] = comment.author.username
            comment_item['author_url'] = reverse('accounts:profile', args=(comment.author.id,))
            comment_item_list.append(comment_item)

        data = json.dumps(comment_item_list, cls=utils.CommentJSONEncoder)
        return HttpResponse(data, content_type="application/json")
    else:
        PermissionDenied('Not accept post')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题