【发布时间】:2021-08-08 20:19:05
【问题描述】:
大家好,如何使用序列化器限制结果数?
简单来说就是有一个cmets表,里面可以包含不同类型的帖子。
class CourseComment(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
content = models.TextField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
还有这里的相关表
class CourseMessage(models.Model):
course_id = models.ForeignKey(Course, on_delete=models.PROTECT)
author_id = models.ForeignKey(User, on_delete=models.PROTECT)
text = models.TextField() # RAW Format must exclude specials chars before publish
is_pinned = models.BooleanField(default=False)
comments = GenericRelation('CourseComment')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
我根据文档制作了序列化程序 https://www.django-rest-framework.org/api-guide/relations/
class CourseMessages(serializers.ModelSerializer):
user = Author(source='authorid', read_only=True)
files = MessageFiles(source='coursemessageattachedfile_set', many=True)
message_comments = MessageComments(source='comments', many=True, read_only=True)
class Meta:
model = CourseMessage
fields = ['text', 'updated_at', 'user', 'files', 'message_comments']
class MessageComments(serializers.RelatedField):
def to_representation(self, value):
ct = ContentType.objects.get_for_model(value)
serializer = Comments(value, read_only=True, source='last_comments')
return serializer.data
class Comments(serializers.ModelSerializer):
author = Author(source='user', read_only=True)
class Meta:
model = CourseComment
fields = ['content', 'author']
一切正常,但我希望看到前 3 个 cmets。 也许有人遇到过这样的问题,或者可以建议如何做得更好。 我为 RetrieveAPIView 详细信息页面获取此数据。前三个 cmets 需要显示在前面。
要求 Django==3.2.5 djangorestframework==3.12.4
提前致谢 :)
【问题讨论】:
标签: python django django-rest-framework django-serializer