私はDRFを使用しています。 マイmodels.py:Django-rest-frameworkシリアライザがモデルインスタンスの保存に失敗する
class Farm(models.Model):
farmer = models.ForeignKey(User, verbose_name="Farmer of this farm")
name = models.CharField(max_length=15, blank=False, verbose_name="Farm name", help_text="Please give a single word name for your farm.")
address = models.TextField(help_text="Please provide the address without the postal code", blank=False,)
postal_code = models.CharField(max_length=5, blank=False, default='12043')
size = models.DecimalField(max_digits=9, decimal_places=6, blank=False,)
#To add user's full name in the admin interface for better readability
def get_farmer_full_name(self):
return self.farmer.get_full_name()
#Works like a verbose_name but for a method
get_farmer_full_name.short_description = 'Farmers full name'
マイserializers.py:
class FarmSerializer(serializers.ModelSerializer):
class Meta:
model = Farm
fields = ('farmer', 'name', 'address', 'postal_code', 'size')
def create(self, validated_data):
return Farm.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.address = validated_data.get('address', instance.address)
instance.postal_code = validated_data.get('postal_code', instance.postal_code)
instance.size = validated_data.get('size', instance.size)
instance.save()
return instance
私のviews.py:私はこのURLをurl(r'^farms/save/$', views.addFarm),
当たると
@api_view(('POST',))
def addFarm(request):
data = JSONParser().parse(request)
farmer = Farm(farmer = request.user)
serializer = FarmSerializer(farmer, data=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)
は、私は新しいを保存したいです要求されたパラメータを持つファームインスタンス。私は郵便番号を使用してリクエストを送信しています。
しかし、回答として{"farmer":["This field is required."],"name":["This field is required."],"address":["This field is required."],"size":["This field is required."]}
エラーが表示されます。
私の要求は、次のようになります。
注:最初のフィールド「農民私は、パラメータとして送信することはできませんが、私は、私はrequest.user.id
とパスでそれを抽出する必要があると思いますそれだけでは、私は確信していません。
私は間違っていますか?どのようにこれを修正することができますか?
あたりのように、あなたはrequest.dataの出力を投稿することができますか? – Anurag
これは次のようになります:{u'size ':u'123.56'、u'postal_code ':u'12034'、u'name ':u'Lisa'、u'address ':u'lichtenau'}:郵便配達員私はRawとJsonを選択し、{ "name": "Lisa"、 "012"、 "lichtenau"、 "0120"このフィールドは必須であるとFarmerに応答する必要があります。 'farmer = farm(farmer_id = request.user)'を 'farmer = Farm(farmer = request.user)'に変更すると、print(serializer.is_valid())はFalse – Nitish
を出力します。同じ? – jarussi