[英]POST related Fields Django rest Framework
django的新功能。 我想做的是發布一個具有OneToOneField屬性的模型。 您如何發布?
型號
Article(models.Model):
name=models.CharField(max_length=50)
description=models.TextField(max_length=200)
Characteristic(models.Model):
article=models.OneToOneField(Article,on_delete=models.CASCADE,primary_key=True)
other=models.FloatField()
another=models.IntegerField()
序列化器
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model=Article
field='__all__'
class CharacteristicSerializer(serializers.ModelSerializer):
article=serializers.StringRelatedField()
class Meta:
model=Characteristic
field='__all__'
Views.py POST方法(基於API)
def post(self, request,format=None):
serializer=CharacteristicSerializer(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)
如果我嘗試使用類似這樣的內容發布:
(some_url ...)/ characteristics / other = 4.4 another = 4 post = 1
我收到下一個錯誤:
django.db.utils.IntegrityError:(1048,“列'post_id'不能為空”)
這個想法是接收模型Article的ID,然后保存模型特征。
有任何想法嗎?
終於我解決了。 它僅與字典有關。
方法開機自檢
def post(self,request,format=None):
serializer=CharacteristicsSerializer(data=request.data)
if serializer.is_valid():
tmp=self.get_article(pk=int(self.request.data['article']))
serializer.save(article=tmp)
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
目前該方法有效,如果還有另一種更好的方法可以實現,並且有人想分享它,我將非常感激
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.