【问题标题】:Django Rest Framework v3.0 : How to map custom serializer fields to model field while saving an object?Django Rest Framework v3.0:如何在保存对象时将自定义序列化器字段映射到模型字段?
【发布时间】:2015-03-12 16:08:43
【问题描述】:

我的基于班级的视图如下所示。 “Get”用于列出所有预订,“Post”用于创建新预订。

class BookingList(APIView):
    def get(self, request, format=None):
        bookings = Booking.objects.all()
        paginator = Paginator(bookings, 10)
        page = paginator.page(1)
        serializer = BookingSerializer(page.object_list, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = BookingSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我的 Serializer 类看起来像这样。

class BookingSerializer(serializers.HyperlinkedModelSerializer):
    field1 = serializers.SerializerMethodField('get_alternate_var1')
    field2 = serializers.SerializerMethodField('get_alternate_var2')

    class Meta:
        model = Booking
        fields = ('field1', 'field2','var3','var4')

    def get_alternate_field1(self, obj):
        return obj.var1

    def get_alternate_field2(self,obj):
        return obj.var2 

class Booking(models.Model):
    var1 = models.CharField(max_length=200)
    var2 = models.CharField(max_length=200)
    var3 = models.CharField(max_length=200)
    var4 = models.CharField(max_length=200)
    ....

现在,这与 GET 方法完美结合。如何使用 POST 创建新对象? 我的帖子参数是 field1、field2、var3,我必须在保存之前将默认值 (uuid) 添加到 var4。我无法将 field1、field2 映射到 Model 的 var1 和 var2。我该如何解决这个问题?

【问题讨论】:

    标签: python django api django-rest-framework serialization


    【解决方案1】:

    调用 serializer.save() 应该创建一个新实例。来自文档

    调用 .save() 将创建一个新实例,或者更新一个 现有实例,取决于是否传递了现有实例 实例化序列化器类时:

    我会更改帖子上的参数名称以匹配您的模型。或者在帖子中手动更改数据字典,以便这些变量在将它们交给您的序列化程序之前就在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2018-06-07
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多