Две формы в основанном на классе CreateView Django - PullRequest
0 голосов
/ 08 октября 2018

Я хочу вставить данные через представление создания. У меня есть две формы в одном представлении, и я не могу их обработать. Я сохраняю одну форму за раз, но не обе одновременно. В одной форме у меня есть csvfile.Now я сохранил первую форму обычным методом HTML-файла, просто получив CSV-файл и сохранив его.Но для второй формы я использовал Uploadform и хочу сохранить ее с помощью метода createview. Пока я не могу это сделать, я совершенно новичок в django и запутался. До сих пор я узнаю, что form.save не работает в классена основе представления. Пожалуйста, кто-то предлагает правильное решение, как сохранить форму загрузки.Код ниже:

  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)

У меня возникает ощущение, что янаписал плохой код, но все равно буду очень признателен за исправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...