0

カテゴリには次のモデルがあります

class Category(models.Model):
   name = models.CharField(max_length=30)
   is_active=models.BooleanField()
   photo=models.ImageField(upload_to='category')
   def __unicode__(self):
     name = str(self.name)
     return name
  def image(self):
    return self.photo or 'DEFAULT_PIC.jpg'
  class Meta:
        permissions = (
            ('category','Category'),
            ('view_category', 'View category'),
        )

私のフォームクラスは次のとおりです

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.FileField(
        required=False,
        label='Select an Image',
        help_text='max. 4 megabytes'
   )

挿入と更新の両方に最適です。現在、フォームに既にアップロードされている画像を読み込もうとしています(たとえば、画像を含む1つのカテゴリを既に追加しているとします。別の画像をアップロードしたいので、しようとしています以前にアップロードされた画像のプレビューを表示します)

ビューでデータを渡し、フォームでいくつかのハックを試みました

formdata = categoryForm({'name':p.name,'is_active':p.is_active,'id':p.id,'photo':p.image()})

フォームでは、以下のように変更しました

def __init__(self, data=None, **kwargs):
#    pass
     super(categoryForm, self).__init__(data, **kwargs)
     if self.data['photo']!='':
        self.fields['uploaded_photo'] =forms.CharField(widget=forms.TextInput,required=False,label=mark_safe('<img src="/media/%s" height="100">'%(self.data['photo'])))
        #self.fields['uploaded_photo'].widget.attrs['value']=self.data['photo']

これで、以前にアップロードされた画像が label に完全に表示されます。

その後、別の画像をアップロードしようとしましたが、次のエラーが表示されます

TypeError at /update/category/

init () は最大で 2 つの引数を取ります (3 つ指定)

画像のアップロードを処理するスクリプトは次のとおりです。

formdata = categoryForm(request.POST,request.FILES)
        if formdata.is_valid():
            cd = formdata.cleaned_data
            p1=Category()
            p1.id=cd['id']
            p1.name=cd['name']
            p1.is_active=cd['is_active']
            p1.photo=cd['photo']
            p1.save()

ここで何が起こっているのか教えてください

4

1 に答える 1

1

ImageFieldを使用して生活を楽にしてみてください

クラスImageField(** kwargs)¶

  • デフォルトウィジェット:ClearableFileInput
  • 空の値:なし
  • 正規化:ファイルの内容とファイル名を単一のオブジェクトにラップするUploadedFileオブジェクト。
  • ファイルデータがフォームにバインドされていること、およびファイルがPILによって理解される画像形式であることを検証します。
  • エラーメッセージキー:必須、無効、欠落、空、invalid_image

    ImageFieldを使用するには、PythonImagingLibraryがインストールされている必要があります。

    フォームでImageFieldを使用する場合は、ファイルデータをフォームにバインドすることも忘れないでください。

ここで完全なドキュメントをチェックしてください

于 2012-05-03T11:57:13.297 に答える