在使用django rest框架时,如何强制用户id为值?
我希望我的RESTAPI能够添加对象,但有一个转折点 我的模型有一个名为user的字段,对于匿名用户可以是None,也可以是设置它的人的id 我如何以优雅的方式执行此操作 另外,如果user字段为None,我希望新对象的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
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。