如何获取values('content_object')?

3 投票
1 回答
879 浏览
提问于 2025-04-21 02:36

我在使用标准的 django.contrb.comments 应用...

django/contrib/comments/models.py

class BaseCommentAbstractModel(models.Model):
    """
    An abstract base class that any custom comment models probably should
    subclass.
    """

    # Content-object field
    content_type = models.ForeignKey(ContentType,
            verbose_name=_('content type'),
            related_name="content_type_set_for_contrib_%(class)s")
    object_pk = models.TextField(_('object ID'))
    content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
    ...

我需要获取与通用关系相关的评论列表:

views.py

from django.contrib.comments import Comment

comment_list = list(Comment.objects.values_list('id', 'content_object')

但是它报了一个错:

FieldError: 无法将关键字 'content_object' 解析为字段。可选项有:comment, content_type, flags, id, ip_address, is_public, is_removed, object_pk, site, submit_date, user, user_email, user_name, user_url

有没有办法解决这个问题?

1 个回答

2

content_object 是一个叫做 GenericForeignKey 的字段。你应该指定 object_pk(外键字段)来代替:

Comment.objects.values_list('id', 'object_pk')

更新

要获取评论的 ID 和对象的 URL:

[(pk, urlresolvers.reverse('comments-url-redirect', args=(ct, o)))
 for pk, o, ct in Comment.objects.values_list('id', 'object_pk', 'content_type')]

撰写回答