非空时更改为ImageField显示的默认文本

时间:2014-08-14 05:24:07

标签: django django-forms django-crispy-forms django-models

我有以下字段:

photo = models.ImageField(null=True,blank=True,upload_to="product_images")

我在forms.py为此字段定义了以下布局:

self.fields['photo'].label = "Asset Image"
self.helper.layout = Layout(
    'photo',
    HTML("""{% if form.photo.value %}
               <img height="80"
                    width="160"
                    class="pull-left"
                    src="{{ MEDIA_URL }}{{ form.photo.value }}">
             {% endif %}""", ),

现在我可以上传与此特定字段关联的图片。但是,当我尝试更新图像时,我在模板中看到以下内容:

screenshot of image field

有什么方法可以更改布局,以便在图像字段不为空时只显示浏览按钮和现有图像?换句话说,请删除文字Currently: product_images/km_2.jpeg Clear Change:

1 个答案:

答案 0 :(得分:0)

我非常确定ImageField使用ClearableFileInput来呈现HTML。

所以要摆脱&#34;目前:......清除&#34;您需要继承ClearableFileInput并修改template_with_clear和/或template_with_initial成员的内容。

from django.forms import ClearableFileInput

class MyClearableFileInput(ClearableFileInput):
     template_with_initial = '%(input_text)s: %(input)s'

随后您使用MyClearableFileInput,例如:

class MyForm(ModelForm):

    class Meta:
        model = MyModel
        widgets = {
            "file": MyClearableFileInput(),
        }

我使用FileField对此进行了测试,但我非常确定它也适用于ImageField