2016-09-26 93 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) 

現在正在工作,如果有另一種更好的方式來做到這一點,有人想分享它,我會感謝