26

次のSOの質問を見てみましたが、運がありませんでした。わからない、多分私は答えを理解していなかった。

1) Django で FileInput ウィジェットの「Currently」タグとリンクを削除するには?

2) Django ModelForm ImageField

私のフォーム:

class SettingsForm(forms.ModelForm):
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")})
    class Meta:
        model = Settings
        fields = ("company_logo")
    ....

私のモデル:

class Settings(models.Model):
    strg=CustomFileSystemStorage(strict_name='images/company_logo.png',save_format='PNG')
    company_logo=models.ImageField(upload_to='images',blank=True,null=True,storage=strg)
    .....

レンダリング後:

画像フィールド

最初のリンクから、 が をmodels.ImageField継承しFileInputて余分なものを追加していることがわかりますが、これを克服する方法がわかりませんか?

前もって感謝します。

4

3 に答える 3

34

解決策は次のとおりです。

class SettingsForm(forms.ModelForm):
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")}, widget=forms.FileInput)
    class Meta:
        model = Settings
        fields = ("company_logo")
    ....

forms.FileInputから継承されたものではなく、基本フィールドを使用するよう ImageField に指示するために、ウィジェットを追加しましたFileInput

于 2013-01-15T13:03:52.840 に答える
9

@mtndesign、テンプレートの好きな場所に配置できる「削除」オプションも必要になる場合があります。

class MyForm(forms.ModelForm):
    photo = forms.ImageField(required=False, widget=forms.FileInput)
    remove_photo = forms.BooleanField(required=False)

    ...

    def save(self, commit=True):
        instance = super(MyForm, self).save(commit=False)
        if self.cleaned_data.get('remove_photo'):
            try:
                os.unlink(instance.photo.path)
            except OSError:
                pass
            instance.photo = None
        if commit:
            instance.save()
        return instance
于 2013-07-18T23:54:33.927 に答える
7

初期化時に指定することで、フォーム フィールドのレンダリングに使用されるウィジェットを変更できます。

class SettingsForm(forms.ModelForm):
    company_logo = forms.ImageField(label=_('Company Logo'),required=False, \
                                    error_messages ={'invalid':_("Image files only")},\
                                    widget=FileInput)

ウィジェットのドキュメントを参照してください。

于 2013-01-15T13:03:28.033 に答える