【发布时间】:2021-09-07 00:07:56
【问题描述】:
以上两种方法有什么区别?
我不明白它们是如何工作的,我确实尝试过谷歌搜索、文档、StackOverflow、中等文章,但我不明白它们的工作原理。
ListCreateAPIView 是否命中了 create 方法作为列表的长度?如何覆盖它? ListSerializer,我根本不明白。所以我必须有一个父列表序列化器和子模型序列化器。
在每个方法中我应该在哪里添加验证?如果我想覆盖字段或保存额外信息怎么办。
基本上,我正在尝试为批量创建用户创建 API 端点。这意味着除了验证之外,我还需要为在后端创建的每个用户设置密码。我该如何保存它?
当我尝试使用 ListCreateAPIView 时,它一直向我抛出错误 ListSerializer is not iterable 即使我设置了 many = True。
ListCreateAPI 仅适用于模型序列化程序还是我需要将类设置为 ListSerializer 类?
而且,当我关注这篇关于使用 ListSerializer 批量创建的中型文章时,它一直告诉我类似“JSON 解析错误 - 期待 ',' 分隔符:第 4 行第 20 列(字符 72)”之类的信息
我真的不明白 ListSerializer 和 ListCreateAPIView 的工作原理。
任何帮助将不胜感激。我是这个其余 API 的新手。谢谢。
我的代码只是基本的
serializers.py
class BulkCreateUsersListSerializer(serializers.ListSerializer):
def create(self, validated_data):
users = [UserModel(**item) for item in validated_data]
return UserModel.objects.bulk_create(users)
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = ...
fields = ...
list_serializer_class = BulkCreateUserListSerializers #commented when I tried using the ListCreateAPIView
views.py
class CreateBulkUsersAPIView(ListCreateAPIView):
serializer_class = UserSerializer
queryset = UserModel.objects.all()
def get_serializer(self, *args, **kwargs):
""" if an array is passed, set serializer to many """
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super(CreateBulkUsersAPIView, self).get_serializer(*args, **kwargs)
----编辑 1---- “ListSerializer 对象不可迭代”的回溯
Template error:
In template C:\Users\Documents\Django Projects\startup\env\lib\site-packages\rest_framework\templates\rest_framework\horizontal\form.html, error at line 2
'ListSerializer' object is not iterable
1 : {% load rest_framework %}
2 : {% for field in form %}
3 : {% if not field.read_only %}
4 : {% render_field field style=style %}
5 : {% endif %}
6 : {% endfor %}
【问题讨论】:
-
你到底是怎么得到
ListSerializer is not iterable even after I set many = True.
标签: django django-rest-framework django-views