2015-03-12 2 views
0

J'ai un problème avec Django Rest Framework. J'ai les codes suivants:Django rest-framework howto sérialiser une clé objetc/foreign

serializers.py

class TextSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Text 
     fields = ('title', 'project', 'content') 

    def create(self, validated_data): 
     return Text.objects.create(**validated_data) 

views.py

@csrf_exempt   
def text_view_set(request, project_id): 
    project = get_object_or_404(Project, pk=project_id) 

    if request.method == 'POST': 
     data = JSONParser().parse(request) 
     serializer = TextSerializer(data=data) 
     # How to put project in serializer to is_valid() return True? 
     if serializer.is_valid(): 
      serializer.save() 
      return JSONResponse(serializer.data, status=status.HTTP_201_CREATED) 
     return JSONResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

my_command.py

def handle(self, *args, **options): 
     text = u'Lorem ipsum dolor sit amet, deseruisse voluptatum est cu, ea elit tation delicatissimi per. Decore soleat pri at.' 
     url = u'http://localhost:8080/text/4/' 

     params = { 'title' : u'Hello World', 'content': text.encode('utf8'), } 
     req = requests.post(url, data=json.dumps(params), headers={"Content-Type": "application/json"}) 

Ainsi, le résultat est une mauvaise erreur de demande (400), car la méthode is_valid() renvoie False. C'est bon. Le champ 'projet' n'est pas dans l'objet de données sérialisé. Mais, comment puis-je insérer cette valeur dans la méthode View ou Model? Je ne veux pas passer cette valeur (projet) dans params, parce qu'il est déjà dans l'URL:

 url = u'http://localhost:8080/text/4/' 
+0

Pourquoi ne pas vous map « url » à un HyperlinkedRelatedField pointant sur la relation (en utilisant 'source')? –

Répondre

0

Que diriez-vous quelque chose comme ..

data = JSONParser().parse(request) 
data.update({'pk': project_id}) 
+0

Super! Ce travail pour moi! 'data.update ({'project': project_id})' – user3529544