2017-04-13 1 views
0

Ive가 이틀 동안이 작업을하고 있습니다. 하나의 이미지 파일을 업로드 할 수있는 웹 사이트를 만들었지 만 동일한 메인 모델에 연결된 더 많은 파일을 업로드 할 수 있기를 원합니다. forms.py을 : 이 내가 한 사진 업로드가 무엇 장고 수입 형태의 Django가 여러 이미지 업로드

from .models import Exam 

class ExamForm(forms.ModelForm): 
    class Meta: 
     model = Exam 
     fields = ['exam_number', 'exam_file'] 
     widgets = { 
     'exam_number': forms.NumberInput(
      attrs={'id': 'exam_number', 'required': True,}) 
     } 

Models.py :

from django.db import models 
from django.contrib.auth.models import User 
from django.template.defaultfilters import slugify 
from datetime import datetime 
from django.core.validators import MaxValueValidator, MinValueValidator 

class Exam(models.Model): 
    exam_number = models.PositiveIntegerField(validators=[MaxValueValidator(6),MinValueValidator(1)]) 
    exam_path = models.CharField(max_length=255) 
    exam_file = models.ImageField() #i want to be able to upload more of these 
    exam_date = models.DateTimeField(auto_now_add=True) 
    exam_user = models.ForeignKey(User, null=True) 

    def __str__(self): 
     return self.exam_path 

    def __int__(self): 
     return self.exam_number 

views.py :

def create_exam(request, letnik_id, classes_id, subject_id): 
    response_data = {} 
    if subject_id in SUBJECTS: 
     path = letnik_id + '/' + classes_id + '/' + subject_id 
     form = ExamForm(request.POST or None, request.FILES or None) 
     if form.is_valid(): 
      exam = form.save(commit=False) 
      exam.exam_user = request.user 
      exam.exam_path = path 
      exam.exam_file = request.FILES['exam_file'] 
      file_type = exam.exam_file.url.split('.')[-1] 
      file_type = file_type.lower() 
      if file_type not in IMAGE_FILE_TYPES: 
       context = { 
       'error_message': 'error', 
       } 
       return Http404("Napaka") 
      if Exam.objects.filter(exam_path=path, exam_number=exam.exam_number): 
       context = { 
       'form': form, 
       'error_message': 'error', 
       } 
       return render(request, 'tests.html', context) 
      exam.save() 
      return redirect('subject_id', letnik_id=letnik_id, classes_id=classes_id, subject_id=subject_id) 
     context = { 
     "form": form 
     } 
     raise Http404("error") 
    raise Http404("error") 

필자는 파일을 분리 된 모델로 만드는 것이 가장 좋다고 들었지만 부모 (시험) 모델에 연결할 수있는 뷰를 만드는 방법을 모릅니다. 도움을 주시면 감사하겠습니다.

답변

0

당신은 대신 시험에 exam_file를 추가,보기에 그런 다음이

class ExamFile(models.Model): 
     file = models.ImageField() 
     exam = models.ForeignKey(Exam, null=False) 

처럼 보일 것입니다 별도의 모델을 만들 필요가 대신이 새로운 모델을 만드는 데 사용됩니다. 이것은 당신이 체크 아웃 할 수있다, 형태를 고정에 대한 자세한 내용은이

from .models import Exam, ExamFile 
... 
exam_file = ExamFile.objects.create(
        file = request.FILES['exam_file'], 
        exam=exam 
      ) 

과 같이 보일 것이다 문서는 here

발견