无法使用表单上载多个图像

2024-09-29 21:57:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有django应用程序和多个图片上传问题。 在添加到Familymember model字段image之前,一切正常。 现在我无法为FamilyMember创建任何项。在

请帮忙。在

这是我的模型:

class Profile(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    created_date = models.DateTimeField(default=timezone.now)

    def get_absolute_url(self):
        return reverse('profile-update', kwargs={'pk': self.pk})

    def __unicode__(self):
        return "%s %s" % (self.first_name, self.last_name)


class FamilyMember(models.Model):
    profile = models.ForeignKey(Profile)
    name = models.CharField(max_length=100)
    file = models.FileField(upload_to="localefile/")
    relationship = models.CharField(max_length=100)

以下是表格:

^{pr2}$

以下是我的观点,要创造。在

class ProfileCreate(CreateView):
    model = Profile
    fields = ['first_name', 'last_name']


class ProfileFamilyMemberCreate(CreateView):
    model = Profile
    fields = ['first_name', 'last_name']
    success_url = reverse_lazy('profile-list')

    def get_context_data(self, **kwargs):
        data = super(ProfileFamilyMemberCreate, self).get_context_data(**kwargs)
        if self.request.POST:
            data['familymembers'] = FamilyMemberFormSet(self.request.POST)
        else:
            data['familymembers'] = FamilyMemberFormSet()
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        familymembers = context['familymembers']
        with transaction.atomic():
            self.object = form.save()

            if familymembers.is_valid():
                familymembers.instance = self.object
                familymembers.save()
        return super(ProfileFamilyMemberCreate, self).form_valid(form)

我还使用了一个JavaScript代码,来自here

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="{% static 'formset/jquery.formset.js' %}"></script>
<script type="text/javascript">
    $('.formset_row').formset({
        addText: 'add family member',
        deleteText: 'remove',
        prefix: 'familymember_set'
    });
</script>

Tags: nameselfformdatamodelscontextscriptprofile
1条回答
网友
1楼 · 发布于 2024-09-29 21:57:58

当你上传一个文件时请求.FILES,因此还必须将其传递给FormSet,例如:

def get_context_data(self, **kwargs):
        data = super(ProfileFamilyMemberCreate, self).get_context_data(**kwargs)
        if self.request.POST:
            data['familymembers'] = FamilyMemberFormSet(
                data=self.request.POST,
                files=self.request.FILES
           )
        else:
            data['familymembers'] = FamilyMemberFormSet()
        return data

别忘了在表单中添加enctype:

^{pr2}$

相关问题 更多 >

    热门问题