1 回答

TA贡献1863条经验 获得超2个赞
问题是您试图在对象实际保存到数据库之前对其进行序列化 - 因此传递给序列化程序的查询集将不包含这个新项目。改变顺序:
for n in new:
n.save()
xml_serializer.serialize(Warranty.objects.filter(id=n.id), stream=out)
另请注意,您当前的逻辑将新的序列化写入您的 for 循环内的文件 - 我不确定这是您想要的。您可以像这样一次序列化所有内容:
if request.method == 'POST':
formset = WarrantyFormSet(request.POST, request.FILES)
if formset.is_valid():
new_items = formset.save() # commit = True since you don't need to change anything before saving
new_item_ids = [n.id for n in new_items]
with open("file.xml", "w") as out:
XMLSerializer = serializers.get_serializer("xml")
xml_serializer = XMLSerializer()
xml_serializer.serialize(
Warranty.objects.filter(id__in=new_item_ids), stream=out)
添加回答
举报