如何在Django中映射对象?

时间:2017-10-28 18:42:16

标签: python django python-3.x django-rest-framework django-views

我们假设我在POST方法中有三个字段 - field1field2field3但是在POST方法field2和{{1}在添加到数据库期间应该具有相同的值。因此,无需手动添加field3field2=2实例。我只能添加field3=2field1=1,然后field2=2将自动添加到此正文中,最后将整个3个字段添加到数据库中。我想知道应该如何以最佳方式完成它?它应该在视野中完成吗?我按照下面显示的方式尝试。

views.py:

field3=2

serializers.py:

class UserObject(GenericAPIView):

    def get_serializer_class(self, *args, **kwargs):
        if self.request.method == 'POST':
            return ObjectPostSerializer
        return ObjectSerializer

    def post(self, request, user_id):

        serializer = ObjectPostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user_id=user_id)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

1 个答案:

答案 0 :(得分:0)

可能您可以使用简单逻辑,从帖子序列化器中排除field3,并在save模型方法上设置

串行器中的

class ObjectPostSerializer(serializers.ModelSerializer):

    class Meta:
        model=Object
        exclude = ('field3', )

在模特中:

class Object(model.Model):
    # YOU FIELDS DECLARE HERE

    def save(self, *args, **kwargs):
        if not self.pk:
            self.field3 = self.field2
        super(Object, self).save(*args, **kwargs)