我正在使用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?
答案 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过滤注释,按提交日期对其进行排序。如果查询不为空,则接受第一条评论。