这是我第一次使用DRF。无法与DRF创建()嵌套关系
我的模型:
class ServiceCategory(models.Model):
category = models.CharField(max_length=24)
class Service(models.Model):
service = models.CharField(max_length=24)
category = models.ForeignKey('ServiceCategory')
他们的串行:
class ServiceCategorySerializer(serializers.ModelSerializer):
class Meta:
model = ServiceCategory
fields = ('id', 'category')
class ServiceSerializer(serializers.ModelSerializer):
category = ServiceCategorySerializer()
class Meta:
model = Service
fields = ('service', 'category')
def create(self, data):
return Service.objects.create(**data)
和视图:
elif request.method == 'POST':
serializer = ServiceSerializer(data=request.data)
print(serializer.initial_data) # To debug the contents of the request
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)
开始之前,我添加了嵌套类的ServiceSerializer,我没有创建新服务的问题。输出<QueryDict: {'category': ['1'], 'service': ['EC2']}>
显然我提供的类别请求,但我得到"category" : ["This field is required"]
错误。
所以我认为这个问题可能与我在ServiceSerializer中的create(self, data)
方法有关,但我无法指出它究竟有什么问题。
我错过了什么?
UPDATE
没有ServiceCategorySerializer在ServiceSerializer,并且此视图:
elif request.method == 'POST':
serializer = ServiceSerializer(data=request.data)
print(serializer.initial_data) # for debugging
if serializer.is_valid():
print(serializer.data) # for debugging
serializer.initial_data
回报<QueryDict: {'category': ['1'], 'service': ['EC2']}>
和 serializer.data
返回{'service': 'EC2', 'category': 1}
所以我假设的serializer.data
内容究竟会得到传递给ServiceSerializer的create()
方法。本身,它的工作原理,但是当我包括ServiceCategorySerializer里面,POST不通过,我得到同样恼人的"category" : ["This field is required"]
我一直坚持这个超过6小时了。到底是怎么回事???
谢谢!满分为你 - 接受和upvoted。 – Duos