如何使用Django的CreateView逐行保存Textarea表单数据?
如何使用Django的CreateView逐行保存Textarea表单数据?
我有一个模型,并希望使用Django中的文本区表单批量保存数据。数据应该逐行保存,我使用splitlines()进行分割,每行数据用split(",")分割。我在form_valid()函数中进行操作,但似乎做得不对。
只有最后一行成功保存。
forms.py
class DataForm(forms.ModelForm): textarea_data = forms.CharField(widget=forms.Textarea) class Meta: model = Item exclude = ('part_number','length','height','weight')
views.py
class InsertData(generic.CreateView): model = Item form_class = DataForm def get_success_url(self): return reverse('item_list') def form_valid(self, form): self.object = form.save(commit=False) textarea_data = form.cleaned_data['textarea_data '] data_line_list = textarea_data.splitlines() for each_line in data_line_list: each_line_list = each_line.split(",") self.object.part_number = each_line_list[0] self.object.length = each_line_list[1] self.object.weight = each_line_list[2] self.object.height = each_line_list[3] self.object.save()
请问我错在哪里。操作应该在其他地方进行吗?
在使用Django的CreateView时,我遇到了如何逐行保存Textarea表单数据的问题。经过阅读Stack Overflow上的一个解答,我找到了解决方法。在每次迭代开始时,我应该将主键设置为None。
具体的解决方法如下:
for each_line in data_line_list: self.object.pk = None #添加这行代码 each_line_list = each_line.split(",") self.object.part_number = each_line_list[0] self.object.length = each_line_list[1] self.object.weight = each_line_list[2] self.object.height = each_line_list[3] self.object.save()
我明白这可能不是一个好的做法,但至少现在它能够正常工作了。