2013-11-24 109 views
1

开始打击我的头靠在墙上......也许我错过了一些简单的东西。Django ImageField not rendering ClearableFileInput

models.py

class GFImage(models.Model): 
    image = models.ImageField(upload_to = 'uploads', null=True, blank=True) 

views.py

def addImage(request): 
errors = [] 
if request.method == 'POST': 
    form = ImageForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.save() 
     urlRedirect = "/home" 
     return redirect(urlRedirect) 
else: 
    form = ImageForm() 
return render(request, "/add_image.html", {'form': form}) 

forms.py

class ImageForm(ModelForm): 
    class Meta: 
     model = GFImage 

个add_image.html

<form method="POST" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <table> 
     {{ form.as_table }} 
    </table> 
    <input type = "submit" value = "Submit"> 

</form> 

无论我做什么,我的状态不会使用ClearableFileInput部件。它应该自动默认,但即使在表单的META中分配它也不起作用。还有什么可以阻止Django使用可清除小部件?

+0

我无法找到'ClearableFileInput'是为'ImageForm'默认插件的文件中没有提到 - 你能指出我的呢? –

+0

ClearableFileInput class ClearableFileInput 文件上传输入:,如果该字段不是必需的并且具有初始数据,则附加复选框输入以清除字段的值。 –

回答

1

当选择了初始文件时,ClearableFileInput将只显示清除复选框。看着你的表单,它看起来像一个没有初始数据的新表单,所以复选框将不会显示。

def render(self, name, value, attrs=None): 
    .. snip .. 
    if value and hasattr(value, "url"): 
     template = self.template_with_initial 
     substitutions['initial'] = format_html(self.url_markup_template, 

https://github.com/django/django/blob/5fda9c9810dfdf36b557e10d0d76775a72b0e0c6/django/forms/widgets.py#L372

+0

现在有道理。我并没有考虑与数据库有关的问题,而是关于表单中的输入字段。我用一个按钮和一些jquery解决了我的需求。 –