我正在阅读这里有关自定义多个更新的内容,我还没想到在什么情况下ListSerializer调用自定义更新方法.我想一次更新多个对象,我现在不担心多次创建或删除.
从文档中的示例:
# serializers.py
class BookListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
# custom update logic
...
class BookSerializer(serializers.Serializer):
...
class Meta:
list_serializer_class = BookListSerializer
Run Code Online (Sandbox Code Playgroud)
和我的ViewSet
# api.py
class BookViewSet(ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Run Code Online (Sandbox Code Playgroud)
我的网址设置使用 DefaultRouter
# urls.py
router = routers.DefaultRouter()
router.register(r'Book', BookViewSet)
urlpatterns = patterns('',
url(r'^api/', include(router.urls)),
...
Run Code Online (Sandbox Code Playgroud)
所以我使用了这个设置,DefaultRouter以便/api/Book/使用BookSerializer.
一般的想法是,如果我POST/PUT/PATCH一个JSON对象数组,/api/Book/那么序列化器应切换到BookListSerializer?
我已经尝试过POST/PUT/PATCH JSON数据列表/api/Book/,如下所示:
[ {id:1,title:thing1}, {id:2, title:thing2} ]
Run Code Online (Sandbox Code Playgroud)
但它似乎仍然使用BookSerializer而不是处理数据BookListSerializer.如果我通过POST提交,我会得到Invalid …
在我的压缩器设置中,我在大多数javascript中使用SlimIt:
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.SlimItFilter', ]
我的一些js文件不应该通过SlimIt,因为文件已经缩小,或者当javascript与其他文件缩小时会抛出一些错误.我的模板块最终看起来像这样:
{# code that I minify #}
{% block compressed_libs %}
{% compress js %}
<script src="/static/js/compress_this.js"></script>
<script src="/static/js/also_compress_this.js"></script>
...
{% endcompress %}
{% endblock %}
{# code that shouldn't minify #}
{% block non-compressible_libs %}
<script src="/static/js/already.min.js"></script>
<script src="/static/js/breaks-everything.js"></script>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我可以为不同的块/文件设置不同的压缩过滤器规则,以便在跳过SlimIt时我的"不可压缩"文件仍然可以通过压缩器连接在一起吗?