我的 Post
类有一个序列化器,它有一个 image
和一个 link
属性。
media
是一个 FileField
,link
是一个 URLField
,它是我分享的其他地方的 URL发布(在另一个网站上。)
我想要:
提交我的帖子数据(文本和图像)
访问提交文件的 URL,以便在其他地方共享该文件。
找到
link
值后更新它。
这是我尝试过的:
post = PostCreateSerializer(data=request.data, context={'request': request})
post.is_valid(raise_excpetions=True)
post.save()
media_url = post.data.get('media')
link = find_link_value(media_url)
post.link = link
post.save()
这会引发异常。说:
You cannot call `.save()` after accessing `serializer.data`.If you need to access data before committing to the database then inspect 'serializer.validated_data' instead.
问题是当我使用 post.validated_data.get('media')
而不是 .data
时,它不会给我网址。它给了我一个 InMemoryUploadedFile
对象,当然,它没有任何路径和 url。
我想我可以使用 InMemoryUploadedFile
对象的 name
属性来查找 url(将在 .save()
之后创建的 URL) ),但是当名称重复时,磁盘和url中文件的真实名称与其原始名称不同(例如,name.jpg
和name_aQySbJu.jpg
)并且我无法将其用于我的目的。
问题
如何才能访问该上传文件的 URL,并在更新我的 post
后调用 save()
?
最佳答案
序列化器的save()
方法返回相应的实例。因此,您可以使用它来获取 url
post = PostCreateSerializer(data=request.data, context={'request': request})
post.is_valid(raise_excpetions=True)
<b>post_instance = post.save()
media_url = post_instance.media.url</b>
link = find_link_value()
<b>post_instance.link = link
post_instance.save()</b>
关于django - 在 Django Rest Framework 中访问 .data 后更新序列化器中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52343062/