首页 > 解决方案 > Django 表单 imageupload 给出空 dic

问题描述

我正在尝试创建编辑配置文件表单,我正在尝试从编辑配置文件表单中获取数据。我在 request.POST 中获取所有数据,但我使用 request.Files 得到空{}

视图.py

class EditProfile(View):
    template_name="todo_app/edit_profile.html"
    def get(self,request,pk):
        if request.user.is_authenticated:
            user_id=pk
            profile=UserProfile.objects.get(user=user_id)
            content={
                'profile':profile,
            }
            return render(request,self.template_name,content)
        else:
            return redirect('todo_app:login')
    
    def post(self,request,pk):
        request_data=request.POST
        first_name=request_data.get('first_name')
        last_name=request_data.get('last_name')
        mob_no=request_data.get('mob_no')
        address_1=request_data.get('address_1')
        address_2=request_data.get('address_2')
        gender=request_data.get('gender')
        age=request_data.get('age')
        state=request_data.get('state')
        city=request_data.get('city')
        country=request_data.get('country')
        bio=request_data.get('bio')
        # profile_pic=request.FILES['profile_pic']
        print(request_data)
        print("_"*123)
        print(request.FILES)
        return redirect('todo_app:edit_profile',pk)

控制台上的打印结果是

<QueryDict: {'csrfmiddlewaretoken': ['mkfuwR6Uc99svosQvsVpho11JOXOdESSmp2sm1ULDFrFu3UHRrkASTWeSyRwXyzH'], 'first_name': ['upasana'], 'last_name': ['kulshresths'], 'address_1': ['9 Purushottam Nagar'], 'address_2': ['Dayal Bagh'], 'mob_no': ['9087654321'], 'gender': ['Male'], 'age': ['12'], 'state': ['Uttar Pradesh'], 'city': ['Agra'], 'country': ['India'], 'bio': ['Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professo'], 'profile_pic': ['Screenshot from 2021-07-14 16-44-31.png']}>
___________________________________________________________________________________________________________________________
<MultiValueDict: {}>

edit_profile.html

<form method="POST" action="{% url 'todo_app:edit_profile' profile.user.id %}"  enctype="multipart/form-data">
     {% csrf_token %}
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="first_name">First name</label>
      <input type="text" class="form-control" id="first_name" value="{{profile.user.first_name}}" name="first_name" required>
    </div>
    <div class="col-md-6 mb-3">
      <label for="last_name">Last name</label>
      <input type="text" class="form-control" id="last_name" value="{{profile.user.last_name}}" name="last_name" required>
    </div>
    <div class="col-md-6 mb-3">
      <label for="address_1">Address line 1</label>
      <input type="text" class="form-control" id="address_1" value="{{profile.address_line_1}}" name="address_1" required>
    </div>
    <div class="col-md-6 mb-3">
      <label for="address_2">Address line 2</label>
      <input type="text" class="form-control" id="address_2" value="{{profile.address_line_2}}" name="address_2" required>
    </div>
  </div>

  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="mobile_no">Mobile No</label>
      <input type="number" min="6000000000" max="9999999999" value="{{profile.user.mob_no}}" class="form-control" id="mobile_no" name="mob_no" required>
    </div>
    <div class="col-md-3 mb-3">
      <label for="gender">Gender</label>
      <select class="custom-select" id="gender" name="gender" required>
        <option>Male</option>
        <option>Female</option>
        <option>️‍&lt;/option>
      </select>
    </div>
    <div class="col-md-3 mb-3">
      <label for="age">Age</label>
      <input type="number" min="0" max="120" value="{{profile.age}}" class="form-control" id="age" name="age" required>
    </div>
  </div>
  
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="State" class="form-label">State</label>
      <input type="text" class="form-control" id="State" name="state" value="{{profile.state}}">
    </div>
    <div class="col-md-3 mb-3">
      <label for="city" class="form-label">City</label>
      <input type="text" class="form-control" id="city" name="city" value="{{profile.city}}">
    </div>
    <div class="col-md-3 mb-3">
      <label for="country" class="form-label">Country</label>
      <input type="text" class="form-control" id="country" name="country" value="{{profile.country}}" >
    </div>
  </div>

  <div class="form-row">
    <div class="col-md-10 mb-3">
    <label for="bio">Bio</label>
      <textarea class="form-control" placeholder="Leave a comment here" id="bio" style="height: 100px" name="bio">{{profile.bio}}</textarea>
    </div>
    <div class="col-md-2 mb-3 ml-auto mt-4">
      <img src="{{profile.profile_pic.url}}" class="rounded-circle" width="100px" alt="...">
    </div>
  </div>

  <div class="input-group mb-3">
  <div class="input-group-prepend">
    <span class="input-group-text" id="profile_pc_spam">Profile Pic</span>
  </div>
  <div class="custom-file">
    <input type="file" class="custom-file-input" id="profile_pic"  name='profile_pic' >
    <label class="custom-file-label" for="profile_pic">Choose file</label>
  </div>
</div>
<div class="text-center">
<button class="btn my_button_delete mb-4 ustify-content-center" type="submit" >Submit form</button>
</div>
</form>

我究竟做错了什么?我不想使用 django 表单。我尝试在堆栈溢出上搜索与此问题相关的旧问题,但我发现每个人都建议使用 django 表单。如果我错过任何答案,请标记我

标签: djangodjango-rest-frameworkdjango-viewsdjango-templates

解决方案


推荐阅读