Django formset不保存我的文件

时间:2018-02-22 21:54:13

标签: python django

所以我有这两个模型Lecture和FileUpload。我希望用户能够在特定课程中添加讲座,并为该讲座上传多个文件。事情是,在我提交表单后,信息被保存,除了上传的文件,所以我猜我的formset有问题。请看一下:



FileFormset = inlineformset_factory(Lecture, FileUpload, exclude=[])


def classroom(request):
    if request.method == 'POST':
        form1 = LectureForm(request.POST)
        if form1.is_valid():
            lecture = form1.save()
            formset = FileFormset(request.POST, request.FILES, instance=lecture, prefix='files')
            if formset.is_valid():
                formset.save()
            else:
                print(formset.errors)
            formset.save()
        return redirect('courses:index')
    else:
        form1 = LectureForm()
        formset = FileFormset()
    context = {'teacher_data': TeacherData.objects.all(),
               'teachers': Teacher.objects.all(),
               'courses': Course.objects.all(),
               'form1': form1,
               'formset': formset,
               }
    return render(request, 'courses/classroom.html', context)

 <form method="post" action="">
                    {% csrf_token %}
                    {{ form1.as_p }}
                    {{ formset.management_form }}
                    {% for form in formset %}
                        {{ form }} <br>
                    {% endfor %}
                <br>
                    <button type="submit">Add Lecture</button>
                </form>
                

class LectureForm(forms.ModelForm):
    class Meta:
        model = Lecture
        fields = ('course', 'lecture_title', 'lecture_category', 'content')


class FileForm(forms.ModelForm):
    class Meta:
        model = FileUpload
        fields = ('files',)
&#13;
class Lecture(models.Model):
    LECTURE_CHOICES = (
        ('Courses', 'Courses'),
        ('Seminars', 'Seminars'),
    )
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures',)
    lecture_category = models.CharField(max_length=10, choices=LECTURE_CHOICES, default='Courses',)
    lecture_title = models.CharField(max_length=100, blank=True, null=True)
    content = models.TextField(blank=True, null=True)

    def __str__(self):
        return str(self.lecture_title)


class FileUpload(models.Model):
    files = models.FileField(upload_to='documents', null=True, blank=True)
    lecture = models.ForeignKey('Lecture', related_name='files', on_delete=None, default=None)

    def __str__(self):
        return str(self.files)
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:3)

从widget中添加enctype属性,

<form method="post" action="" enctype= multipart/form-data>

试试这个