2017-07-12 4 views
0

Fisrt, voici mes modèles:Comment créer un objet avec clé étrangère

class Question(models.Model): 
    description = models.CharField(max_length=200) 
    analysis = models.CharField(max_length=50) 

    def __str__(self): 
     return self.description 


class QuestionOption(models.Model): 
    question = models.ForeignKey(Question,related_name='options') 
    content = models.CharField(max_length=100) 
    isAnswer = models.BooleanField() 

    def __str__(self): 
     return self.question.description + " " + self.content 

Mes Sérialiseurs:

class QuestionSerializer(ModelSerializer): 
    class Meta: 
     model = Question 
     fields = '__all__' 

Le Serializer de QuestionOption est en même

Mon ViewSet:

class QuestionViewSet(ModelViewSet): 
    queryset = Question.objects.all() 
    serializer_class = QuestionRetriveSerilzer 

Je veux poster des données JSON, comme ceci:

{ 
"options": [ 
    { 
     "content": "This is the first option", 
     "isAnswer": false 
    }, 
    { 
     "content": "This is the second option", 
     "isAnswer": true 
    } 
], 
"description": "which one is true?", 
"analysis": "It's esay" 
} 

J'espère que mon QuestionViewSet peut créer un Question et deux QuestionOption pour moi automatiquement, et quand je posterai que les données JSON, la options est liste nulle, donc je remplacer la méthode create de QuestionViewSet, comme ceci:

def create(self, request, *args, **kwargs): 
     serializer = QuestionSerializer(data=request.data) 
     question = serializer.save() 
     for data in request.data['options']: 
      data['question'] = question.id 
      optionSeializer = OptionSerializer(data=data) 
      print optionSeializer.is_valid() 
      optionSeializer.save() 
     return Response(serializer.data,status=status.HTTP_200_OK) 

et cette méthode peut fonctionner, mais je veux trouver un moyen plus simple de le faire, parce que je dois passer outre update et d'autres méthodes, ce n'est pas une tâche facile. ..

Alors comment concevoir Serializers et ViewSet afin de créer automatiquement des objets et mettre à jour des objets avec la clé étrangère?

Répondre