私はうまくいくはずですが、数時間後には私は迷っています。私はDjangoとDRFを学んでいるので、すべてが闘争のようです。Django Rest Framework - ListCreateAPIViewの使用時にPOSTする方法
私はDjango Rest Frameworkを使用してAPIを作成しました。私は(私はSTOCK serializer
にプッシュすることができます)でPUSH要求ではなく、GET要求を実行することができます。私が知っている
HTTP/1.0 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Date: Sat, 27 May 2017 14:51:52 GMT
Server: WSGIServer/0.2 CPython/3.6.0
Vary: Accept
X-Frame-Options: SAMEORIGIN
{
"stock": [
"This field is required."
]
}
:私は次のエラーを取得する
http POST http://127.0.0.1:8000/api/v1/notes/ note='api test' {"stock":"test"} 'Authorization: Token 1235454545656'
:私は、次のコマンドを使用してPOSTしようとすると、私は(Djangoの休憩フレームワークのウェブサイトからの命令を使用して)書かれているコードに基づいて、それは必須です...それがPUSHリクエストに含まれている理由です!誰かが私が間違ってやっていることを説明し、それを修正する方法はありますか?
これは私のbook/models.py
次のとおりです。
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
import uuid
class Stock(models.Model):
'''
Model representing the stock info.
'''
user = models.ForeignKey(User)
book_code = models.CharField(max_length=14, null=True, blank=True)
def __str__(self):
return self.book_code
class Note(models.Model):
'''
Model representing the stock note.
'''
user = models.ForeignKey(User)
note = models.TextField(max_length=560)
stock = models.ForeignKey(Stock)
date_note_created = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.note
これは私のapi/serializer.py
です:
from bookstock.models import Stock, Note
from rest_framework import serializers
class StockSerializer(serializers.ModelSerializer):
class Meta:
model = Stock
fields = ('id', 'user', 'book_code')
class NoteSerializer(serializers.ModelSerializer):
stock = StockSerializer(many=True)
user = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = Note
fields = ('user', 'note', 'stock', 'date_note_created')
これは私のapi/views.py
です:
from rest_framework import generics
from bookstock.models import Stock, Note
from api.serializers import StockSerializer
from rest_framework.permissions import IsAuthenticated
class StockList(generics.ListCreateAPIView):
serializer_class = StockSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
user = self.request.user
return Stock.objects.filter(user=user)
def perform_create(self, serializer):
serializer.save(user=self.request.user,)
def perform_update(self, serializer):
serializer.save(user=self.request.user)
class NoteList(generics.ListCreateAPIView):
serializer_class = NoteSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
user = self.request.user
return Note.objects.filter(user=user)
def perform_create(self, serializer):
serializer.save(data=self.request.data)
def perform_update(self, serializer):
serializer.save(data=self.request.data)
これは私のapi/urls.py
です:
from django.conf.urls import url, include
from api import views
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
url(r'^v1/stocks/$', views.StockList.as_view()),
url(r'^v1/notes/$', views.NoteList.as_view()),
url(r'^v1/api-token-auth/', obtain_auth_token),
url(r'v1/api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
どうしたのですか?
ストックは在庫のリストでなければなりません...あなたはシリアライザでmany = Trueを追加して以来、シリアライザはその在庫をdictsのリストにすることを期待しています。 – zaidfazil
Hi Fazil、ありがとう私はmain = Trueを削除しても、同じエラーが表示されます。 HTTP POSTをリスト 'http POST http://127.0.0に変更する場合。{ "株":[ "タイプが正しくありません:1:8000/api/v1/notes/note = 'api test'株価= [" test "] 'Authorization:Token 1235454545656''予想されたpk値、strを受け取りました。 " ] } '。その他の提案はありますか? – shaz
シリアライザのストックフィールドを実際に通過する必要があるデータは何ですか? book_codeまたはuserですか? – zaidfazil