我有基于2个模型的Django REST API序列化程序,书和章
class Book(models.Model):
title = models.TextField(unique=True)
description = models.TextField(blank=True, null=True)
published_at = models.DateTimeField(default=timezone.now, db_index=True)
added_at = models.DateTimeField(auto_now_add=True, db_index=True)
modified_at = models.DateTimeField(auto_now=True, db_index=True)
class Chapter(models.Model):
book = models.ForeignKey(
Book, on_delete=models.CASCADE,
related_name='chapters', db_index=True
)
published_at = models.DateTimeField(default=timezone.now, db_index=True)
added_at = models.DateTimeField(auto_now_add=True, db_index=True)
modified_at = models.DateTimeField(auto_now=True, db_index=True)
在图书序列化程序中,我想要2个自定义字段
-
first_chapter
个 -
last_chapter
个
每个对象都具有模型Chapter
的对象,您可以从字段名称中了解第一个对象和最后一个对象按published_at
字段排序
章节模型有一个外键来预订.
我try 了下面这样的方法来读到最后一章
class LastChapterField(serializers.RelatedField):
def get_queryset(self):
return core_models.Chapter.objects\
.filter(book=M.OuterRef("pk"))\
.select_related("number")\
.order_by("-published_at")[:1]
但我没有看到我的结果中包括最后一章,尽管在Book Serializer的fields
中明确提到了它
我希望返回结果中的完整对象,并且我希望能够对Chapter
个模型对象的嵌套字段(first_chapter或last_chapter)之一使用order by.