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?
C'est génial !!! Merci beaucoup, cela peut bien fonctionner! – IceLee
De rien. – Ykh