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) を残したユーザーを知りたい。

これを行う「ジャンゴ」の方法はありますか?または生の 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

モデル インスタンスのコンテンツ タイプを読み込み、コンテンツ タイプとオブジェクト ID でコメントをフィルター処理し、送信日で並べ替えます。次に、クエリが空でない場合、最初のコメントが取得されます。

于 2012-07-16T16:16:04.693 に答える