、私は以下のクラスがあります。ジャンゴ休憩Frameworkで外部キー関係を投稿私の<strong>モデル</strong>で
class Topic(models.Model):
name = models.CharField(max_length=25, unique=True)
class Content(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
topic = models.ForeignKey(Topic, blank=True, null=True)
マイシリアライザはこのようなものです:
class TopicSerializer(serializers.ModelSerializer):
class Meta:
model = Topic
fields = ('name')
class ContentSerializer(serializers.ModelSerializer):
topic = TopicSerializer(read_only=True)
class Meta:
model = Content
fields = ('title', 'body', 'topic')
よし、でように私のURLファイル、私は次のパターンがあります:
urlpatterns = [
...
url(r'^api/topic_detail/(?P<name>[a-zA-Z0-9-]+)/content_list/$', views.topic_content_list, name='topic_content_list'),
...
]
したがって、ユーザーが/api/topic_detail/sports/content_list/
と言うと、スポーツのトピックを持つすべてのコンテンツのリストが表示されます。ここで私が望むのは、POST上記のURLに次のデータがあると、自動的にスポーツに関連するトピックフィールドを持つコンテンツオブジェクトが作成されます。
私は私のビューにこの次のようにやろうとしています:
{
"title": "My blog post",
"body" : ".....",
}
コンテンツ・オブジェクトが作成されます:
@api_view(['GET', 'POST'])
def topic_content_list(request, name):
try:
topic = Topic.objects.get(name=name)
except:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
contents = Content.objects.filter(topic=topic)
serializer = ContentSerializer(contents, many=True)
return Response(serializer.data)
elif request.method == 'POST':
request.data["topic"] = topic
serializer = ContentSerializer(data=request.data)
print 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)
は今、この私がURL /api/topic_detail/sports/content_list/
とPOST行くと言うことができますタイトルと本文フィールドが正しく設定されています。ただし、topicフィールドはnullに設定されています。これをどうすれば解決できますか?どんな助けもありがとうございます。
また、私は非常に多くのことが自動的に起こることに不快であるので、一般的なビューセットを使用することを提案しないでください。
さてさて、私は私のダムのミス固定
EDIT:
あるclass ContentSerializer(serializers.ModelSerializer):
topic = TopicSerializer(read_only=False)
class Meta:
model = Content
fields = ('title', 'body', 'topic')
は、私がFalseにREAD_ONLY引数を設定します。しかし、今のポストは新しいエラーを作成します。
{
"topic": {
"non_field_errors": [
"Invalid data. Expected a dictionary, but got Topic."
]
}
}
私はかなり確信しているこれは、私が送信していdata.websiteはJSONではなく、ただDjangoのモデルインスタンスという事実を意味します。どのようにして単一のインスタンスをJSON化できますか?
ありがとうございます。編集を追加しました。お手伝いできますか? –
Nvm、私は問題が別のものであるので別の質問をするべきです。 –
私の答えを更新しました。 –