2013-11-24 5 views
1

Начиная бить головой о стену ... возможно, мне не хватает чего-то простого.Django ImageField не рендеринг 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 класс 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. –

Смежные вопросы