获得每篇帖子的第一条评论

时间:2012-07-16 15:59:32

标签: mysql django model

我正在使用django评论系统,并且只想获取帖子的第一条评论。

mysql> desc django_comments ;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| content_type_id | int(11)      | NO   | MUL | NULL    |                |
| object_pk       | longtext     | NO   |     | NULL    |                |
| site_id         | int(11)      | NO   | MUL | NULL    |                |
| user_id         | int(11)      | YES  | MUL | NULL    |                |
| user_name       | varchar(50)  | NO   |     | NULL    |                |
| user_email      | varchar(75)  | NO   |     | NULL    |                |
| user_url        | varchar(200) | NO   |     | NULL    |                |
| comment         | longtext     | NO   |     | NULL    |                |
| submit_date     | datetime     | NO   |     | NULL    |                |
| ip_address      | char(15)     | YES  |     | NULL    |                |
| is_public       | tinyint(1)   | NO   |     | NULL    |                |
| is_removed      | tinyint(1)   | NO   |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

我的帖子是content_type_id = 48。

我想知道每个帖子(object_pk)的第一条评论(min submit_date)的用户。

有“django”方式吗? 还是需要使用原始SQL?

1 个答案:

答案 0 :(得分:0)

使用这样的函数:

def get_first_comment(post):
    from django.contrib.comments.models import Comment
    from django.contrib.contenttypes.models import ContentType
    ct = ContentType.objects.get_for_model(post)
    first_comments = Comment.objects.filter(
        content_type=ct,
        object_id=post.pk,
        ).order_by("submit_date")
    if first_comments:
        return first_comments[0]
    return None

它加载模型实例的内容类型,然后按内容类型和对象id过滤注释,按提交日期对其进行排序。如果查询不为空,则接受第一条评论。