在使用django rest框架时,如何强制用户id为值?

在使用django rest框架时,如何强制用户id为值?,django,django-rest-framework,django-1.7,Django,Django Rest Framework,Django 1.7,我希望我的RESTAPI能够添加对象,但有一个转折点 我的模型有一个名为user的字段,对于匿名用户可以是None,也可以是设置它的人的id 我如何以优雅的方式执行此操作 另外,如果user字段为None,我希望新对象的id存储在匿名用户会话中的数组中,以便在他决定注册时分配它 以下是我创建视图集的方式: class PointAPIView(viewsets.ModelViewSet): queryset = Point.objects.all() serializer_cla

我希望我的RESTAPI能够添加对象,但有一个转折点

我的模型有一个名为user的字段,对于匿名用户可以是None,也可以是设置它的人的id

我如何以优雅的方式执行此操作

另外,如果user字段为None,我希望新对象的id存储在匿名用户会话中的数组中,以便在他决定注册时分配它

以下是我创建视图集的方式:

class PointAPIView(viewsets.ModelViewSet):
    queryset = Point.objects.all()
    serializer_class = PointSerializer
    permission_classes = (IsOwnerOrReadOnly,)
我怀疑我必须编写一个自定义的create方法,对吗?如果是这样,它需要看起来如何?文档只说它就在那里,但没有说明它需要如何构造以及需要返回什么。你能给我举一个虚拟方法的例子,我可以把我的逻辑放在那里吗

谢谢你抽出时间

编辑:因为有人问。模型的外观如下所示:

class Point(models.Model):
  user = models.ForeignKey('auth.User')
  value = models.IntegerField()
现在的问题是,在通过rest api创建点对象时,如何强制用户字段为request.user。

在您的PointSerializer中,重写create方法并获取请求对象以提取当前用户并将其分配给创建的点

class PointSerializer(serializers.ModelSerializer):
     //point fields

    class Meta:
          model = Point
          fields = ('value','user')

    def create(self,validated_data):
        request = request = self.context['request']
        user = request.user
        point = Point.objects.create(value=validated_data['value'])
        point.user = user
        point.save()
        return point

不确定是否可以对已验证的_数据进行节点化,如果不能,则需要将其复制过来

def create(self, validated_data):
    request = self.context['request']
    user = request.user

    if user.is_authenticated():
        validated_data.update({
            'user': user.id
        })

    point = Point.objects.create(**validated_data)

    return point

你能在你的问题中包括你的模型吗?现在,如果没有更多的上下文,很难回答这个问题。如果这个问题不是100%清楚,很抱歉。我添加了一个简短的模型示例。现在有了带有用户字段的模型。当通过rest api创建时,我希望此字段为request.user。