django - DRF PrimaryRelatedField 写入时和 NestedSerializer 读取时?

标签 django django-rest-framework

我正在使用嵌套序列化器。我需要 ProfileSerializer 为获取请求返回完整的相关 Project 对象,并且只考虑 id 切换(改变当前),就像 relatedPrimaryField behaiviour 对于 ProfileSerializer< 上的 post/put 请求。关于如何实现这一目标的任何解决方案?

class ProfileSerializer(serializers.ModelSerializer):
    current = ProjectSerializer()
    class Meta:
        model = Profile
        fields = ('function', 'current')

最佳答案

正如 Linova 所提到的,在不使用第三方库的情况下解决此问题的最简单方法是在序列化程序中声明两个单独的字段。你的嵌套序列化器 current会保持不变,但您会添加一个新的 PrimaryKeyRelatedField串行器。嵌套序列化程序应该是只读的,但相关字段不会是只读的。我通常将相关字段命名为 <field>_id按照惯例。

在 GET 请求中,嵌套序列化程序和 id字段将被返回,但对于 PUT 或 POST 请求只有 <field>_id需要指定。

class ProfileSerializer(serializers.ModelSerializer):
    current = ProjectSerializer(read_only=True)
    current_id = serializers.PrimaryKeyRelatedField(queryset=Projects.objects.all(), source='current')
    class Meta:
        model = Profile
        fields = ('function', 'current', 'current_id')

关于django - DRF PrimaryRelatedField 写入时和 NestedSerializer 读取时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42833368/

相关文章:

python - 创建时向 django-rest-framework ModelViewSet 添加其他字段的最佳方法

带有序列化程序的 Django REST 框架 CurrentUserDefault()

python - 使检索到的推文中的链接可点击

django - “NoneType”对象没有属性 'save' Django

python - Django 1.4.18 开发服务器在 VirtualBox 下响应缓慢

python - Django 可重用应用程序,具有与friendfeed 类似的功能

python - 使用nginx/flup重新请求后,如何运行后台线程?

python - Django REST 框架 : get field of related model in serializer

django - "This field is required."DRF

python - Django Rest框架serializer.save()返回 "Invalid data. Expected a dictionary, but got group"