2016-09-26 102 views
0

新的django。我想要做的是发布一个具有OneToOneField属性的模型。你如何发布?POST相关的字段Django rest框架

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, "Column 'post_id' cannot be null")

的想法是接收模式条的id,然后保存模型特点。

任何想法?

+0

不是Django的人 - 女服务员是什么我使用...你不只是需要包含关键“文章”的特征实例的ID,具有关键“其他”的浮动和具有“另一个”字段的一个整数的POST的身体? –

+1

您需要在请求中提供POST数据,而不是网址。 –

+0

我在另一篇文章中发现了这个,但你必须给它另一个模型的数据,我的问题是只给出模型的ID号 http://stackoverflow.com/questions/27365486/how-to-后到-A-Django的休息框架-API与相关的模型 – hhc

回答

0

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

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) 

现在正在工作,如果有另一种更好的方式来做到这一点,有人想分享它,我会感谢

相关问题