简体   繁体   English

在Django中保存序列化器

[英]Saving a Serializer in Django

When I'm trying to save a model object (its name here is 'RSS) in the view's post() it doesn't get saved, how can I save the model instance 'rss' from the view's post()? 当我试图在视图的post()中保存一个模型对象(这里的名称为“ RSS”)时,它没有被保存,如何从视图的post()中保存模型实例“ rss”?

In the Serializers class: 在Serializers类中:

class RSSSerializer(serializers.ModelSerializer):
    class Meta:
        model = RSS
        fields = ('feed_url', 'website_url', 'description', 'title')

    def create(self, validated_data):
        rss = RSS(**validated_data)
        rss.created_at =  datetime.now()
        rss.last_scan_time = '2001-01-01 00:00:00'
        rss.id = None
        return rss

In the View class: 在View类中:

class RSSList(APIView):
        def post(self, request):
                serializer = RSSSerializer(data=request.data)
                if serializer.is_valid():
                        print("saving rss post")
                        serializer.save()
                        return Response(serializer.data, status=status.HTTP_201_CREATED)
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Your current create method instantiates a new RSS object but doesn't save it. 您当前的create方法会实例化一个新的RSS对象,但不会保存它。 Try this: 尝试这个:

def create(self, validated_data):
    rss = RSS.objects.create(**validated_data)
    rss.created_at = datetime.now()
    ...
    return rss.save()

More info: Django rest framework: override create() in ModelSerializer passing an extra parameter 更多信息: Django rest框架:在ModelSerializer中重写create()并传递额外的参数

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

If your object instances correspond to Django models you'll also want to ensure that these methods save the object to the database. 如果您的对象实例与Django模型相对应,则还需要确保这些方法将对象保存到数据库中。

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

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