0

次のコードを使用して、最後にアップロードした画像をプルしました

class categoryForm(forms.Form):
   name = forms.CharField(widget=forms.TextInput(attrs={'class':'box'}),max_length=32,label='Category',required=True)
   is_active = forms.BooleanField(required=False)
   id = forms.CharField(widget=forms.HiddenInput,required=False)
   photo = forms.ImageField(
     required=False,
     label='Upload photo',
     initial=True,
     help_text='max. 4 megabytes'
     )
   def __init__(self, data,**kwargs):
     super(categoryForm, self).__init__(data, **kwargs)
      if self.data['photo']!='':
         self.fields['photo'].initial=self.data['photo']

更新フォームに入力しているときにデータを渡しました

p=Category.objects.get(id='%s'%(target_id))
formdata = categoryForm({'name':p.name,'is_active':p.is_active,'id':p.id,'photo':p.image()})

初期画像を完璧に表示しています

FileFieldもあるので、categoryFormが呼び出されるアクションページで追加のパラメーターを渡す必要があります。

formdata = categoryForm(request.POST,request.FILES)

この余分なパラメータは私に以下のエラーを与えています

__init__() takes exactly 2 arguments (3 given)

request.FILES init()を削除すると正常に機能しますが、画像をアップロードできません:)

案内してください

4

2 に答える 2

2

__init__関数をこのように変更すると役立ちますか?

  def __init__(self, data, *args, **kwargs):
     super(categoryForm, self).__init__(data, **kwargs)
      if self.data['photo']!='':
         self.fields['photo'].initial=self.data['photo']
于 2012-05-04T06:25:39.443 に答える
0

あなたが正しいコードであるかどうかはわかりません、あなたがそれがうまくいくと言うなら...それならそれはうまくいきます。エラーはここから発生します:

   def __init__(self, data,**kwargs):
     super(categoryForm, self).__init__(data, files, **kwargs)
      if self.data['photo']!='':
         self.fields['photo'].initial=self.data['photo']

または、次のようなことを行うことができます。

formdata = categoryForm(data = request.POST, files = request.FILES)

   def __init__(self, *args, **kwargs):
     super(categoryForm, self).__init__(*args, **kwargs)
      if self.data['photo']!='':
         self.fields['photo'].initial=self.data['photo']
于 2012-05-04T06:27:30.923 に答える