1

我使用 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?

4

1 回答 1

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

它为您的模型实例加载内容类型,然后按内容类型过滤评论,并按提交日期对它们进行排序。然后,如果查询不为空,它将采用第一条评论。

于 2012-07-16T16:16:04.693 回答