私たちは、このスタックでモバイルWebアプリケーションを作成している:Django RESTフレームワークでモデル/シリアライザを正しく定義する方法は?
をPythonの Djangoは、SQLiteのDB ジャンゴREST イオンコルドバ 角度JS
これは、あなたが4複数からの質問にお答えするクイズアプリです選択肢。質疑応答はデータベースに保存されます。 RESTフレームワークの助けを借りてエンドポイントが作成されました。
このJSONファイルでは、Angular JSコントローラは非同期で動作します。 問題はmodel.pyの答えを定義することです。これは配列内の配列を含みます。
私たちは、DjangoのRESTで、この構造体を取得しようとしている:
[
{
"question" : "Java was originally developed at _______________",
"answer" : [
{"id" : 0, "text" : "Sun Microsystems"},
{"id" : 1, "text" : "Intel"},
{"id" : 2, "text" : "Hewlett-Packard"},
{"id" : 3, "text" : "Oracle"}
],
"correct" : 0
},
]
そして、これは我々が持っているものです。
[
{
"question": "Java was originally developed at _______________",
"answer": [
{
"url": "http://127.0.0.1:8000/api/answer/1/",
"answerid": 0,
"text": "Sun Microsystems"
},
{
"url": "http://127.0.0.1:8000/api/answer/2/",
"answerid": 1,
"text": "Intel"
},
{
"url": "http://127.0.0.1:8000/api/answer/3/",
"answerid": 2,
"text": "Hewlett-Packard"
},
{
"url": "http://127.0.0.1:8000/api/answer/4/",
"answerid": 3,
"text": "Oracle"
}
],
"correct": 0
}
]
は、ここに私たちのmodels.pyです:
from django.db import models
class Answer(models.Model):
answerid = models.IntegerField()
text = models.TextField()
class Question(models.Model):
question = models.CharField(max_length=200)
answer = models.ManyToManyField(Answer)
correct = models.IntegerField()
シリアライザ:
from quiz.models import Question, Answer
from rest_framework import routers, serializers, viewsets
class AnswerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Answer
fields = ('answerid', 'text')
class QuestionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Question
fields = ('question', 'answer', 'correct')
read_only_fields = ('answer',)
depth = 1
# ViewSets define the view behavior.
class QuestionViewSet(viewsets.ModelViewSet):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
class AnswerViewSet(viewsets.ModelViewSet):
queryset = Answer.objects.all()
serializer_class = AnswerSerializer
私たちのソリューションでURLを削除することはどういうことですか?
ありがとうございます!私はModelSerializerを使用し、それは最終的に働いた。 'クラスAnswerSerializer(serializers.ModelSerializer): クラスのMeta: モデル=( 'テキスト') フィールド=回答 クラスQuestionSerializer(serializers.ModelSerializer): クラスのMeta: モデル=質問 フィールド=( 'question'、 'answers'、 'correct') read_only_fields =( 'answers'、) 深さ= 1 IDが自動的に設定されているため、カスタムIDも削除する必要がありました – Vietosan