【问题标题】:Changing image in django user change form在 django 用户更改表单中更改图像
【发布时间】:2020-09-19 21:21:10
【问题描述】:

我正在制作一个 django webapp,用户可以在其中上传个人资料图片。我还使用默认的 USERCHANGEFORM 创建了一个 EDIT PROFILE 页面。但问题是,我无法从该表单更新个人资料图片。我可以删除它但不能上传新的?需要帮助。 这是我的用户创建表单


class SignUpForm(UserCreationForm):

    photo               = forms.ImageField(required=False)
    bio                 = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your bio'}))
    designation         = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your designation'}))
    university          = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your university'}))

    company_name        = forms.CharField(widget=forms.TextInput(attrs={'placeholder': "Enter your company's name"}))
    grad_year           = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder': 'What year did you graduate in?'}))
    phone               = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your phone number'}))
    address             = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your present address'}))
    city                = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your city'}))
    company_category    = forms.CharField(widget=forms.TextInput(attrs={'placeholder':  "Enter your company's category"}))
    company_desc        = forms.CharField(widget=forms.TextInput(attrs={'placeholder': "Enter your company's description"}))
    company_site        = forms.CharField()
    no_employees        = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder': 'Enter no. of employees in your company'}))
    technologies        = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'What technologies are you interested in?'}))
    markets             = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'What markets are you interested in?'}))
    linkedin            = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your Linked In profile'}))

    def __init__(self, *args, **kwargs):
        super(UserCreationForm, self).__init__(*args, **kwargs)
        del self.fields['password2']

        for fieldname in ['password1']:
            self.fields[fieldname].help_text = None

        self.fields['password1'].widget.attrs.update({'placeholder': 'Enter your password'})
        self.fields['first_name'].widget.attrs.update({'placeholder': 'Enter your first name'})
        self.fields['last_name'].widget.attrs.update({'placeholder': 'Enter your last name'})
        self.fields['company_site'].widget.attrs.update({'placeholder': "Enter company's website"})
        for field in ['email',
                   'password1',
                   'first_name',
                   'last_name',
                   'bio',
                   'designation',
                   'university',
                   'company_name',
                   'grad_year',
                   'phone',
                   'photo',
                   'address',
                   'city',
                   'company_category',
                   'company_desc',
                   'company_site',
                   'no_employees',
                   'technologies',
                   'markets',
                   'linkedin']:

                   self.fields[field].widget.attrs['class'] = "col-lg-4 col-md-12 col-sm-12 col-xs-12 offset-lg-2 ml-6 form-control"
                   self.fields[field].widget.attrs['style'] = "padding:20px;"

        self.fields['photo'].widget.attrs['class'] = "col-lg-8 col-md-12 col-sm-12 col-xs-12 offset-lg-1 "


    class Meta:
        model = User
        widgets = {
        "email": forms.fields.TextInput(attrs={'placeholder':'Enter your email'}),
        }
        fields = ('email',
                   'password1',
                  'first_name',
                  'last_name',
                   'photo',
                   'bio',
                   'designation',
                   'university',
                   'company_name',
                   'grad_year',
                   'phone',
                   'address',
                   'city',
                   'company_category',
                   'company_desc',
                    'company_site',
                   'no_employees',
                   'technologies',
                   'markets',
                   'linkedin')


这是我的用户更改表单

class EditProfileForm(UserChangeForm):

    def __init__(self, *args, **kwargs):
        super(UserChangeForm, self).__init__(*args, **kwargs)

        for field in [
                    'first_name',
                    'last_name',
                    'bio',
                    'designation',
                    'university',
                    'company_name',
                    'grad_year',
                    'phone',
                    'address',
                    'city',
                    'company_category',
                    'company_desc',
                    'company_site',
                    'no_employees',
                    'technologies',
                    'markets',
                    'linkedin']:
            self.fields[field].widget.attrs['class'] = "col-lg-8 col-md-12 col-sm-12 col-xs-12 offset-lg-2 ml-6 form-control"
            self.fields[field].widget.attrs['style'] = "padding:20px;"


        self.fields['photo'].widget.attrs['class'] = "col-lg-8 col-md-12 col-sm-12 col-xs-12 offset-lg-2 ml-6"
        self.fields['password'].widget.attrs['class'] = "hidden"


    class Meta:
        model = User
        fields = ('first_name',
        'last_name',
        "photo",
        "bio",
        "designation",
        "university",
        "company_name",
        "grad_year",
        "phone",
        "address",
        "city",
        "company_category",
        "company_desc",
         "company_site",
        "no_employees",
        "technologies",
        "markets",
        "linkedin"
        )```

【问题讨论】:

    标签: python django django-models django-forms django-templates


    【解决方案1】:

    基本上你得到了实例,但你不仅能更新图片。

    【讨论】:

    • 代码太长,无法粘贴到这里。堆栈溢出不接受它
    • 我将其粘贴为我的答案
    • 您是否正在创建两个不同的模板来添加和编辑,如果在标签
      中添加 enctype 甚至检查您是否这样做这在你看来 create_form = ProfileForm(request.POST, request.FILES)
    • 我在 EDIT FORM 视图中缺少 request.FILES。谢啦!!!你真的帮了我
    • 很高兴能提供一些帮助
    【解决方案2】:

    试试这个!

    在您的 EditProfileForm 中

    替换

    super(UserChangeForm, self).__init__(*args, **kwargs)
    

    super(EditProfileForm, self).__init__(*args, **kwargs)
    

    在您的注册表单中相同 替换

    super(UserCreationForm, self).__init__(*args, **kwargs)
    

    super(SignUpForm, self).__init__(*args, **kwargs)
    

    你忘记在 EditProfileForm for field in [...] 中添加照片

    【讨论】:

    • 不,伙计,它仍然无法正常工作。此外,'for field in [...]' 用于向表单添加引导样式
    【解决方案3】:
    {% load static %}
    {% block content %}
    
    <!-- Inner Page Banner Area Start Here -->
            <div class="inner-page-banner-area" style="background-image: linear-gradient(to bottom,#002147, #fdc800);">
                <div class="container">
                    <div class="pagination-area">
                        <h1>Edit Profile</h1>
                    </div>
                </div>
            </div>
            <!-- Inner Page Banner Area End Here -->
            <!-- Account Page Start Here -->
    
    <div class="section-space accent-bg">
        <div class="container">
            <div class="row">
                <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
    
                        <div class="profile-details tab-content">
                            <div class="tab-pane fade active in" id="Personal">
                                <h3 class="title-section title-bar-high mb-40">Edit Profile</h3>
                                <form id='login-form' style='text-align:left;' method="post" enctype="multipart/form-data">
                                  <div class="form-group mt-1">
                                  {% csrf_token %}
                                   {% for field in form %}
                                    <p>
    
                                      <div class="mb-n5">{% if field.field.required %}{{ field.label_tag}}<span style='color:red;'>*</span>
                                      {% else %}{{ field.label_tag}}
                                      {% endif %}</div>
    
    
                                      {% if field.name == 'password' %}
    
                                      <a href="{% url 'password_change'%}" class="view-all-primary-btn">Change Password</a>
    
                                      {% else %}
                                      {{ field }}
                                      {% endif %}
                                      <br>
                                      {% for error in field.errors %}
                                        <p style="color: red">{{ error }}</p>
                                      {% endfor %}
                                    </p>
                                    </br>
                                  {% endfor %}
    
    
                                </div>
                                  <button class="view-all-primary-btn" type="submit">Save</button>
                                </form>
                            </div>
                        </div>
                </div>
            </div>
        </div>
    </div>
    {% include 'partials/_footer.html' %}
    {% endblock %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-21
      • 2016-06-09
      • 1970-01-01
      • 2011-03-20
      • 2012-02-28
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多