私は2つのモデルを持っています。著者は彼の記事を表現しています。作者は記事を自由に追加できます(問題は問題ありませんが、問題)。次のように Django Rest Framework - 外部キーデータを持つオブジェクトをパスパラメータに追加します
class Author(models.Model):
name = ...
class Article(models.Model):
author = models.ForeignKey(Author, related_name='articles', on_delete=models.CASCADE)
title = ...
content = ...
timestamp = models.DateTimeField(auto_now=True)
私のシリアライズ
は以下のとおりです。class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
そして、私は単純なビューがありますので、簡単な
url(r'^authors/(?P<author_id>[0-9]+)/articles/$', views.author_articles)
:
@csrf_exempt
def author_articles(request, author_id):
try:
author = Author.objects.get(id=author_id)
except Author.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
articles = author.articles.all()
serializer = serializers.ArticlesSerializer(articles, many=True)
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = serializers.ArticlesSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
URLが定義されていますURLへのPOSTリクエスト:server:port/authors/1/articles/
下の体は魅力的に機能します!私は一度体内に一度パスのparamsに、私は二回著者IDを提供することをある何のバグ
{
"author": 1,
"title": "foo",
"content": "bar"
}
。パスのパラメータから簡単に削除して機能させることができますが、本当に欲しいのはその逆です。私は身体をイドなしで、イドをパスパラムから推測したい。
多くの方法で試してみましたが、繰り返し失敗しました。助けていただければ幸いです。
私はPostgresにDjangoとDjango-Rest-Frameworkを使用しています。
ありがとうございました。
私が質問を投稿する前に、自分自身を試してみました、最初のオプションに機能線を減らすことができます
JsonResponse
など使用
APIView
クラスまたはapi_view
デコレータではなく、あるいはviewsets
を使用し、JSONParser
と定期的なDjangoのビューを必要としませんそれは動作しません。しかし、セカンド - 魅力のような作品はありがとう!再デコレータとビューセット私はビューセットを使い始めましたが失敗しました。どのように動作しているのかを理解するための基礎から始めることにしました。 –@UriShalitあなたがそれを解決してうれしい、続ける:) –