2017-06-30 21 views
0

私はdjangoアプリを持っていて、複数の画像アップロードに問題があります。 Familymemberモデルのフィールドimageに追加するまですべてOKでした。 今、私は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) 

フォームされています

class ProfileForm(ModelForm): 
    class Meta: 
     model = Profile 
     exclude =() 


class FamilyMemberForm(ModelForm): 
    file = forms.FileField(widget=forms.FileInput(attrs={'multiple': True})) 

    class Meta: 
     model = FamilyMember 
     exclude =() 


FamilyMemberFormSet = inlineformset_factory(Profile, FamilyMember, 
              form=FamilyMemberForm, extra=1) 

ここでは、私の見解では作成するために、あります。

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) 

私もhereから、JavaScriptコードを使用します。

<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> 
+0

https://github.com/Chive/django-multiuploadを試しましたか? –

+0

@MHassanまだ、トピックが難しいので教えてください、このツールで私はformsetとマルチアップロードを作成できますか? – Kai

+0

複数のファイルをアップロードするためのパッケージです。 1つのファイルフィールドを持つように、そのファイルフィールドで複数のファイルを選択することができ、選択したすべてのファイルはフォームを保存すると保存されます。私はずっと前に複数のファイルをアップロードするためにそれを使用しました。 –

答えて

0

あなたはそれがrequest.FILESを通過したのファイルをアップロードすると、あなたもあなたにフォームセット、例えば、それを渡す必要がありますので:

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を追加することを忘れないでください:

<form enctype="multipart/form-data" ...> 
関連する問題