Django ModelForm ImageField

前端 未结 3 762
鱼传尺愫
鱼传尺愫 2020-12-16 06:51

I have a model and a form (forms.ModelForm) in which I have an ImageField. The model resembles:

class Business(models.Model):
    business_name = models.Char         


        
3条回答
  •  别那么骄傲
    2020-12-16 07:25

    Here is my solution to the same problem.

    from django.utils.safestring import mark_safe
    from django.utils.html import escape, conditional_escape
    from django.utils.encoding import force_unicode
    from django.forms.widgets import ClearableFileInput, Input, CheckboxInput
    
    class CustomClearableFileInput(ClearableFileInput):
    
        def render(self, name, value, attrs=None):
            substitutions = {
                #uncomment to get 'Currently'
                'initial_text': "", # self.initial_text, 
                'input_text': self.input_text,
                'clear_template': '',
                'clear_checkbox_label': self.clear_checkbox_label,
                }
            template = '%(input)s'
            substitutions['input'] = Input.render(self, name, value, attrs)
    
            if value and hasattr(value, "url"):
                template = self.template_with_initial
                substitutions['initial'] = ('%s'
                                            % (escape(value.url),
                                               escape(force_unicode(value))))
                if not self.is_required:
                    checkbox_name = self.clear_checkbox_name(name)
                    checkbox_id = self.clear_checkbox_id(checkbox_name)
                    substitutions['clear_checkbox_name'] = conditional_escape(checkbox_name)
                    substitutions['clear_checkbox_id'] = conditional_escape(checkbox_id)
                    substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id})
                    substitutions['clear_template'] = self.template_with_clear % substitutions
    
            return mark_safe(template % substitutions)
    

    and then just use the extended widget:

    business_image = forms.ImageField(widget=CustomClearableFileInput())
    

提交回复
热议问题