[英]django-rest-framework deserialize request to create a object with user foreign key
I'd like to create a SpiderService
with a foreign key request.user
. 我想用外键request.user
创建一个SpiderService
。
models: 楷模:
from django.contrib.auth.models import User
class SpiderService(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=20)
serializers: 串行:
class SpiderServiceSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.id')
class Meta:
model = SpiderService
fields = ('id', 'user', 'name')
class SpiderServiceListSerializer(viewsets.ModelViewSet):
queryset = SpiderService.objects.all()
serializer_class = SpiderService
views: 观点:
class SpiderServiceList(APIView):
def get(self, request, format=None):
services = SpiderService.objects.all()
serializer = SpiderServiceSerializer(services, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = SpiderServiceSerializer(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)
def perform_create(elf, serializer):
serializer.save(user=self.request.user)
when I post 当我发布
{
"name": "2"
}
to the api url, got 500 error: 到api网址,出现500错误:
[01/Feb/2016 15:39:55] "POST /services/ HTTP/1.1" 500 17105
IntegrityError: NOT NULL constraint failed: spmanage_spiderservice.user_id
I have read Serializer relations and found I should not write code as above. 我已经阅读了序列化程序的关系 ,发现我不应该如上所述编写代码。 The official example is equal to remove user field
in SpiderServiceSerializer
, and add a spiderservice field
to a UserSerializer
.Seems aim to achieve the syntax like user.spiderservice_set
in django models, which do not fit my purpose. 官方示例等于删除SpiderServiceSerializer
中的user field
, SpiderServiceSerializer
添加spiderservice field
。 UserSerializer
旨在在Django模型中实现类似于user.spiderservice_set
的语法,这不符合我的目的。
I just want to create a spiderservice object with request.user
. 我只想使用request.user
创建一个spiderservice对象。
How to solve it? 怎么解决呢?
您需要将当前用户作为附加参数添加到序列化器的save方法中 :
serializer.save(user=request.user)
do you have any Account serializer for the user model ?? 您有针对该用户模型的任何帐户序列化程序吗?
if so, in your SpiderServiceSerializer try this : 如果是这样,请在您的SpiderServiceSerializer中尝试以下操作:
user = AccountSerializer(read_only=True, required=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.