【问题标题】:POST related Fields Django rest FrameworkPOST 相关字段 Django rest 框架
【发布时间】:2017-02-04 06:39:25
【问题描述】:

django 的新手。我想做的是发布一个具有 OneToOneField 属性的模型。你是怎么发布的?

Models.py

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()

Serializer.py

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,然后保存模型Characteristic。

有什么想法吗?

【问题讨论】:

  • 不是 django 人 - 女服务员是我使用的......你不只需要一个包含特征实例 ID 的 POST 正文,键为“article”,浮点数与键“other”和一个带有“another”字段的int?
  • 您需要在请求中提供 POST 数据,而不是 url。
  • 我在另一篇文章中找到了这个,但是你必须给它另一个模型的数据,我的问题是只给出模型的 ID ARTICLE stackoverflow.com/questions/27365486/…

标签: python django django-rest-framework


【解决方案1】:

最后我能够解决它。这只是关于字典。

方法 POST

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)

目前它正在起作用,如果有其他更好的方法可以做到这一点并且有人想分享它,我将不胜感激

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多