简体   繁体   English

Django-rest-framework序列化程序无法保存模型实例

[英]Django-rest-framework serializer fails to save model instance

I am using DRF. 我正在使用DRF。 My models.py: 我的models.py:

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'

My serializers.py: 我的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 

My views.py: 我的views.py:

@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)

When I hit url(r'^farms/save/$', views.addFarm), this url, I want to save a new Farm instance with the parameters provided in request. 当我点击url(r'^farms/save/$', views.addFarm),这个网址时,我想用请求中提供的参数保存一个新的Farm实例。 I am using Postman to send the request. 我正在使用Postman发送请求。

However I get {"farmer":["This field is required."],"name":["This field is required."],"address":["This field is required."],"size":["This field is required."]} error as response. 但是我得到{"farmer":["This field is required."],"name":["This field is required."],"address":["This field is required."],"size":["This field is required."]}错误作为响应。

My request looks like following: 我的请求如下:

在此输入图像描述

Note: The first field 'farmer' I can not send as a parameter but I guess I have to extract it with request.user.id and pass it exclusively, however I am not sure. 注意:第一个字段'农民'我不能作为参数发送,但我想我必须用request.user.id提取它并将其专门传递,但我不确定。

What am I doing wrong? 我究竟做错了什么? How can this be fixed? 怎么解决这个问题?

Change this in views.py 在views.py中更改此设置

data = {"farmer": request.user.id}
data.update(request.data)
serializer = FarmSerializer(data=data)

Or As per your EDIT 或者根据您的编辑

data = JSONParser().parse(request)
data.update({"farmer": request.user.id})
serializer = FarmSerializer(data=data)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM