2016-09-26 4 views
0

neu bei django. Was ich versuche, ist ein Modell, das eine OneToOneField-Eigenschaft hat. Wie postest du das?POST verwandte Felder Django Rest Framework

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-Methode (API Basierend)

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) 

Wenn ich versuche, mit so etwas POST:

(some_url...)/characteristics/ other=4.4 another=4 post=1

ich den nächsten Fehler:

django.db.utils.IntegrityError: (1048, "Column 'post_id' cannot be null")

Die Idee ist, die ID des Modells Artikel zu erhalten und dann das Modell Merkmal speichern.

Irgendwelche Ideen?

+0

kein django Person dankbar sein werde - Kellnerin ist was ich benutze ... brauchst du nicht nur einen Body für den POST, der die ID der Characteristic-Instanz mit Schlüssel "article" enthält, einen Float mit dem Schlüssel "other" und einen int mit dem Feld "another"? –

+1

Sie müssen POST-Daten in der Anfrage angeben, nicht in der URL. –

+0

Ich habe das in einem anderen Beitrag gefunden, aber Sie müssen es die Daten des anderen Modells geben und meine Frage ist, nur die ID des Modells ARTIKEL http://stackoverflow.com/questions/27365486/how-to- geben Post-zu-A-Django-Ruhe-Framework-Api-mit-verwandten-Modellen – hhc

Antwort

0

Endlich konnte ich es lösen. Es geht nur um Wörterbücher.

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

Vorerst das funktioniert, wenn es eine andere bessere Weg ist, es zu tun und jemand möchte es teile ich

Verwandte Themen