我想通过创建视图插入数据。我在一个视图中有两种形式,我无法处理它们。我一次保存一种形式,而不是同时保存它们。在一种形式中,我有csv现在,我已经通过html文件的通用方法保存了第一个表单,只是获取了CSV文件并保存了它。 但是对于第二种形式,我已经使用Uploadform并想使用createview方法保存它。到目前为止,我无法做到这一点,对django来说还很陌生,并且感到困惑。到目前为止,我了解了form.save在类中不起作用基于视图。请有人提出一个正确的解决方案,如何保存uploadform。 代码如下:
class Addfile(CreateView):
template_name = 'essay/THome.html'
model=UploadAssignment
form_class = UploadForm
def get(self,request):
form=self.form_class(None)
#myform=self.upload_form(None)
return render(request, self.template_name, {'form': form})
def post(self,request):
upload=UploadForm(request.POST or None)
form = self.form_class(None)
if not(upload.is_valid()):
csv_file=request.FILES["csv_file"]
if not csv_file.name.endswith('.csv'):
messages.error(request, 'File is not csv type')
return redirect('essay:file')
if csv_file.multiple_chunks():
messages.error(request, "File size is too big (%.2f MB)." %(csv_file.size/(1000*1000),))
return redirect('essay:file')
file_data=pandas.read_csv(csv_file)
myids=file_data['id'].tolist()
passwords=file_data['password'].tolist()
t_len=len(myids)
teacher=get_object_or_404(Teacher.objects.filter(user=request.user))
for iterate in range(0,t_len):
if (User.objects.filter(username=myids[iterate]).exists() == 1):
messages.error(request, "Cannot register students username already exists")
return render(request, self.template_name, {'form': form})
obj=User.objects.create_user(username=myids[iterate],password=passwords[iterate],is_student=True,is_prof=False)
obj.save()
Student.objects.create(user=obj,teacher=teacher,batch="F-14")
else:
form.teacher = self.request.user
form.save()
return render(request,self.template_name,{'form':form})
如果上载表单无效,则保存CSV文件数据,否则保存上载表单数据。保存CSV文件但上载表单在else语句中不起作用。在上载表单中,除教师以外的所有字段均来自html表单,这是外键来自登录用户。
Forms.py:
class UploadForm(forms.Form):
model=UploadAssignment
Title=forms.CharField(widget=forms.TextInput(
attrs={
"size":40
}
))
deadline=forms.DateField(widget=forms.SelectDateWidget)
Description=forms.CharField(required=True,label="Text",widget=forms.Textarea(
attrs={
"rows":20,
"cols":100
})
)
fields=['title','deadline','description']
在models.py中上传分配:
class UploadAssignment(models.Model):
teacher=models.ForeignKey(Teacher,on_delete=models.CASCADE)
title=models.CharField(max_length=30)
deadline=models.DateField()
description=models.CharField(max_length=100)
我感觉自己写的代码不好,但是如果可以解决的话,我仍然会非常感激。