私は独自のAPIを設定し、POSTメソッドを正常に動作させるのに問題があるため、Django rest frameworkを使用しています。私がしたいことがある新しいチームを作成することです、だから、基本的にDjango Rest Framework - リストが空でない場合は、POSTリクエストで「このリストは空ではありませんか?
[{"id":3,"name":"newTeam","members":["mem1", "mem2"],"services_used":["service1"]}]
:ようにフォーマットJSONファイルexampleteam.jsonと私のAPIをヒットする
curl --form "[email protected]" 127.0.0.1:8000/teams/ > error.html
:私は、curlコマンドを使用しますメンバmem1とmem2を使用し、サービス1を使用します。newTeam、mem1、mem2、およびservice1はすべて自分のデータベースに既に存在します。
私が戻ってきたのは、私のリストに情報がなく、私がこれまで要求したことが反映されていないという奇妙なhtmlです。これはerror.htmlにパイプされたものである。
{"members":["This list may not be empty."],"services_used":["This list may not be empty."]}
これは私には奇妙で、メンバーリストが明らかに空ではないではありませんし、どちらも私の要求でservices_usedリストです。エラーがPOSTメソッドを定義した場所か、モデルに問題があると私は合理的に確信しています。以下は両方のファイルです。
views.py
@api_view(['GET', 'POST'])
def team_list(request):
if request.method == 'GET':
teams = Team.objects.all()
serializer = TeamSerializer(teams, many=True)
return JSONResponse(serializer.data)
elif request.method == 'POST':
serializer = TeamSerializer(data=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)
とmodels.py
class Team(models.Model):
name = models.CharField(max_length=32, default="")
members = models.ManyToManyField('Member')
services_used = models.ManyToManyField('Service')
def __str__(self):
return str(self.name)
class Member(models.Model):
name = models.CharField(max_length=32, default="")
services_used = models.ManyToManyField('Service')
def __str__(self):
return str(self.name)
class Service(models.Model):
name = models.CharField(max_length=64, default="")
def __str__(self):
return(self.name)
とTeamSerializerクラスから関連するモデル:
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
fields = ('id', 'name', 'members','services_used')
POSTリクエストは、データベースを更新していないのはなぜ正しく?
あなたが(すでに既存のオブジェクトのPK)整数のリストでなければなりません...
elif request.method == 'POST':
serializer = TeamSerializer(data=request.data, many=True)
第二の事、メンバーやサービスの多くのパラメータを指定してシリアライザをインスタンス化するオブジェクトのリストを作成したい場合は
ことができます。また、広告d TeamSerializerクラス? –
@MujGabrielがTeamSerializerクラスを追加しました。コメントありがとうございました – Ragnyll