【发布时间】:2019-11-15 03:42:42
【问题描述】:
我正在从 JavaScript 发送一个发布请求。请求是一个对象数组。如果我不对请求进行字符串化,Django 不会返回我实际发送的内容。它只返回[Object object],我无法访问数据。
我尝试过的:
- 在
views.py上创建了一个函数,允许我识别请求及其内容、格式化内容并将其作为参数传递给序列化程序以执行请求。 - 分离 2 个不同模型中的字段并创建 2 个序列化程序,将一个嵌套在另一个序列化程序中,然后创建一个函数来执行创建
# views.py
def perform_create(self, request, *args,**kwargs):
post_request = self.request.POST['registers']
print(post_request)
a = json.loads(post_request)
serialized_data = request.data
request.data['item1'] = a['item1']
request.data['item2'] = a['item2']
request.data['photo1'] = a['photo1']
request.data['photo2'] = a['photo2']
print(request.data)
serializer = InstalationReportSerializer(data=request.data, many= True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data )
return Response(serializer._errors)
# models.py
class ModelContained(CommonInfo):
item1 = models.CharField(
_('item1'),max_length=200, db_column='item_1', blank=True,
null=True, help_text=_('item 1'),)
item2 = models.CharField(
_('item2'), max_length=200, db_column='item_2', blank=True,
null=True, help_text=_('item 2'),)
class ModelContainer(CommonInfo):
header = models.ForeignKey(
ModelContained,
verbose_name=_('header'),db_column='random_name',
on_delete= models.CASCADE, related_name='random',
related_query_name='random',help_text=_('contained model')
)
initial_photos = models.ImageField(
_('initial_photos'), db_column='initial_photos', blank=True,
null=True, upload_to='photo/', help_text=_('before'))
end_photos = models.ImageField(
_('end_photos'), db_column='end_photos', blank=True, null=True,
upload_to='photo', help_text=_('after'))
# serializer.py
class ModelContainerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ModelContainer
fields = (
'header', 'initial_photos', 'end_photos'
)
read_only_fields = ('id')
ModelContainedSerializer(serializers.HyperlinkedModelSerializer):
registers = ModelContainerSerializer(source='ModelContainer_set', many = True)
class Meta:
model = ModelContained
fields = (
'id', 'item1', 'item2','registers'
)
read_only_fields = ('id',)
def create(self, validated_data):
registers_render = validated_data.pop('registers')
register = InstallationReport.objects.create(**validated_data)
return register
前端正在发送:
{
item1: "someinfo",
item2: "another info",
registers: Array(1)
}
数组包含:
0:
end_photos: File {name: "WhatsApp Image 2019-05-14 at 5.28.02 PM(3).jpeg", lastModified: 1557873045827, lastModifiedDate: Tue May 14 2019 17:30:45 GMT-0500 (Colombia Standard Time), webkitRelativePath: "", size: 124922, …}
initial_photos: File {name: "WhatsApp Image 2019-05-14 at 5.28.00 PM.jpeg", lastModified: 1557872985264, lastModifiedDate: Tue May 14 2019 17:29:45 GMT-0500 (Colombia Standard Time), webkitRelativePath: "", size: 99106, …}
【问题讨论】:
-
为什么不对前端请求进行字符串处理?
-
因为文件字段消失,只允许1个表单,前端发送一个字段数组,所以大部分时间是发送2个或多个表单,stringify时,第二个表单会产生错误'无效的 json'
标签: javascript python django-rest-framework