私はAPIを作成するために、ジャンゴとDjango残りのフレームワークを学んでいると私は、このコマンドを実行すると、なぜ周り私の頭をラップすることはできません。ジャンゴ休憩フレームワーク - Userフィールドはないかもしれませんヌル
http --json POST http://127.0.0.1:8000/api/v1/stocks/ book_code='Abook' 'Authorization: Token 123243434354353'
私はエラーを取得しています言う:
HTTP/1.0 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Date: Thu, 25 May 2017 19:16:37 GMT
Server: WSGIServer/0.2 CPython/3.6.0
Vary: Accept
X-Frame-Options: SAMEORIGIN {
"user": [
"This field is required."
]}
「ユーザー」フィールドが必要とされているが、私はそれは私が認証されたユーザ、すなわち、提供してきたトークンに基づいてユーザーを取り込むことを期待しています。
これはbookstock/models.py
です:
from django.db import models
from django.contrib.auth.models import User
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
これはapi/serializer.py
です:
from bookstock.models import Stock
from rest_framework import serializers
class StockSerializer(serializers.ModelSerializer):
class Meta:
model = Stock
fields = ('id', 'user', 'book_code')
これはapi/views.py
です:
from rest_framework import generics
from bookstock.models import Stock
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)
これは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/api-token-auth/', obtain_auth_token),
url(r'v1/api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
私には何が欠けていますか? SOからの回答に基づいて、perform_create
とperform_update
のオーバーライドでユーザー権利が設定されるはずですか?
おかげで多くのことを(
CharField
または何でもお好みでHiddenField
を置き換える):私が考える最もエレガントな方法は、DRFの
currentuserdefault
バリデータを使用することです!それが問題を解決しました! – shaz