【发布时间】:2020-10-30 22:51:58
【问题描述】:
我正在尝试上传一个 csv 文件,然后使用它来填充数据库中的一个表(创建多个对象)。
serializers.py:
def instantiate_batch_objects(data_list, user):
return [
WorkData(
work=db_obj['work'],
recordTime=db_obj['recordTime'],
user=user
) for db_obj in data_list
]
class FileUploadSerializer(serializers.ModelSerializer):
filedata = serializers.FileField(write_only=True)
class Meta:
model = WorkData
fields = ['user', 'filedata']
def create(self, validated_data):
file = validated_data.pop('filedata')
data_list = csv_file_parser(file)
batch = instantiate_batch_objects(data_list, validated_data['user'])
work_data_objects = WorkData.objects.bulk_create(batch)
# print(work_data_objects[0])
return work_data_objects
views.py:
class FileUploadView(generics.CreateAPIView):
queryset = WorkData.objects.all()
permission_classes = [IsAuthenticated]
serializer_class = FileUploadSerializer
# I guess, this is not need for my case.
def get_serializer(self, *args, **kwargs):
print(kwargs.get('data'))
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super().get_serializer(*args, **kwargs)
models.py
class WorkData(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='work_data',
)
work = models.IntegerField(blank=False, null=False)
recordTime = models.DateTimeField(blank=False, null=True)
当我上传文件并发布它时,我收到了这个错误:
尝试在序列化程序
FileUploadSerializer上获取字段user的值时出现 AttributeError。序列化程序字段可能命名不正确,并且与list实例上的任何属性或键都不匹配。原始异常文本是:“列表”对象没有属性“用户”。
但我可以看到表已成功填充到数据库中。我应该从FileUploadSerializer 的create 方法返回什么?
【问题讨论】:
-
FileUploadSerializer.create()应该只重新运行一个模型实例。 -
@ArakkalAbu 我需要批量创建对象。
-
@ArakkalAbu,顺便说一句,您可以返回multiple
-
您可以在传递到端点的数据中添加一个 sn-p 吗?
-
我正在将一个文件传递给 api 端点。然后从文件中读取数据并创建覆盖序列化程序类创建方法的对象。
标签: python django database django-rest-framework