Django投诉管理系统需在views.py中添加哪些内容以接收用户提交的投诉?
具体实现步骤
1. 修复现有模板的错误
你当前的模板存在两个核心问题,导致后端无法接收提交数据:
- 所有输入字段缺少
name属性,Django无法识别参数对应关系 - 文件上传控件写错了,
button标签不支持文件选择,需要改用input标签
修正后的模板代码:
<div class="col-lg middle middle-complaint-con"> <i class="fas fa-folder-open fa-4x comp-folder-icon"></i> <h1 class="all-comp">New Complaint</h1> <form class="" action="{% url 'submit_complaint' %}" method="POST" enctype="multipart/form-data"> {% csrf_token %} <input type="text" name="title" class="form-control col-lg-10 comp-title-field" placeholder="投诉标题"> <p class="desc">描述</p> <button type="button" class="btn btn-secondary preview-btn">预览</button> <textarea name="description" class="form-control comp-textarea" rows="7" placeholder="请输入内容"></textarea> <!-- 保留原按钮样式的文件上传控件 --> <label for="file-upload" class="btn btn-secondary attach-btn"> <i class="fas fa-file-upload"></i> 附件 </label> <input id="file-upload" type="file" name="document" style="display:none;" required> <button type="submit" class="btn btn-secondary save-btn" value="submit"><i class="fas fa-save"></i> 保存</button> </form> </div>
2. 编写forms.py
直接基于你的模型生成ModelForm,自带参数校验,无需重复定义字段:
from django import forms from .models import Complaints class ComplaintForm(forms.ModelForm): class Meta: model = Complaints # 排除需要后台手动赋值的user字段 fields = ['title', 'description', 'highpriority', 'document']
3. 编写views.py逻辑
处理提交请求、绑定登录用户、保存数据:
from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from .forms import ComplaintForm # 要求必须登录才能提交投诉 @login_required def submit_complaint(request): if request.method == 'POST': # 同时传入表单数据和上传的文件 form = ComplaintForm(request.POST, request.FILES) if form.is_valid(): # 先不提交到数据库,补充user字段后再保存 complaint = form.save(commit=False) complaint.user = request.user complaint.save() # 保存成功后跳转到你指定的页面,比如投诉列表页 return redirect('你的路由名称') else: form = ComplaintForm() return render(request, '你的模板文件路径.html', {'form': form})
4. 配置urls.py
新增提交页面的路由:
from django.urls import path from . import views urlpatterns = [ # 其他原有路由 path('submit-complaint/', views.submit_complaint, name='submit_complaint'), ]
注意事项
- 确保你的
settings.py中配置了正确的文件上传路径,否则附件会保存失败 - 如果需要支持高优先级选择,在模板中新增name为
highpriority的checkbox即可 - 提交成功后的跳转路由请替换为你项目中实际存在的路由
内容的提问来源于stack exchange,提问作者Isha Jagadi
相关产品推荐
相关产品推荐

