簡體   English   中英

POST相關字段Django rest Framework

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM