【发布时间】:2020-04-23 11:12:40
【问题描述】:
我遇到了一个挑战,我也打算写博客。我找到了一个解决方案,但由于我要写这篇文章,我想知道是否有更好的方法来序列化 Orderable 模型。
上下文:我的LessonPage(Page) 模型有一个LessonPageDocuments(Orderable) 模型,它允许用户将多个文档添加到特定的课程页面:
class LessonPageDocuments(Orderable):
page = ParentalKey(LessonPage, on_delete=models.CASCADE,
related_name='documents')
document = models.ForeignKey(
'wagtaildocs.Document', on_delete=models.CASCADE, related_name='+'
)
panels = [
DocumentChooserPanel('document'),
]
现在,由于这个项目的需要和业务需求,我们正在创建一个自定义 REST API,而不是使用 Wagtail 的 API。
我发现序列化documents 字段的方式如下:
class LessonDetailsSerializer(serializers.ModelSerializer):
content = RichTextSerializer()
documents = serializers.SerializerMethodField()
def to_representation(self, instance):
ret = super().to_representation(instance)
video_url = ret['video_url']
ret['video_url'] = get_embed(video_url).html if video_url else ''
return ret
def get_documents(self, lesson):
"""Return serialized document fields and file URL"""
request = self.context.get('request')
doc_list = []
for doc_cluster in lesson.documents.all():
doc_list.append({
"url": request.build_absolute_uri(doc_cluster.document.file.url),
"title": doc_cluster.document.title,
"id": doc_cluster.document.pk,
})
return doc_list
class Meta:
model = LessonPage
fields = ['id', 'title', 'slug', 'description',
'video_url', 'content', 'documents']
有没有更好的方法来序列化这个字段? 提前非常感谢您!
【问题讨论】:
标签: python django-rest-framework wagtail