這是我第一次使用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