feedback.views 源代码

from datetime import datetime

from django.db.models import Q
from django.db import transaction

from app.views_dependency import *
from app.models import (
    Organization,
    OrganizationType,
    Notification,
)
from app.utils import (
    get_person_or_org,
)
from app.comment_utils import addComment, showComment
from generic.models import YQPointRecord
from feedback.feedback_utils import (
    examine_notification,
    update_feedback,
    make_relevant_notification,
    inform_notification,
)
from feedback.models import (
    FeedbackType,
    Feedback,
)
from achievement.api import unlock_achievement


__all__ = [
    'feedbackWelcome',
    'viewFeedback',
    'modifyFeedback',
]


[文档] @login_required(redirect_field_name="origin") @utils.check_user_access(redirect_url="/logout/") @logger.secure_view() def viewFeedback(request: HttpRequest, fid): try: # 查找fid对应的反馈条目 fid = int(fid) feedback: Feedback = Feedback.objects.activated().get(id=fid) except: return redirect(message_url(wrong("反馈不存在!"), '/feedback/')) html_display = {} me = utils.get_person_or_org(request.user) # 获取前端页面中可能存在的提示 my_messages.transfer_message_context(request.GET, html_display) # 添加评论和修改活动状态 if request.method == "POST" and request.POST: # 添加评论 if request.POST.get("comment_submit"): # 只有未完成反馈可以发送评论 if feedback.solve_status not in [ Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED, ]: return redirect(message_url(wrong("已结束的反馈不能评论!"), request.path)) anonymous = False # 确定通知消息的发送人,互相发送给对方 if request.user.is_person() and feedback.person == me: receiver = feedback.org.get_user() anonymous = True elif request.user.is_org() and feedback.org == me: receiver = feedback.person.person_id # 老师可以评论,给双方发送通知消息 elif request.user.is_person() and me.is_teacher(): receiver = [ feedback.org.get_user(), feedback.person.person_id, ] # 其他人没有评论权限 else: return redirect(message_url(wrong("没有评论权限!"), request.path)) # 满足以上条件后可以添加评论 addComment(request, feedback, receiver, anonymous=anonymous, notification_title=Notification.Title.FEEDBACK_INFORM) return redirect(message_url(succeed("成功添加1条评论!"), request.path)) # 以下为调整反馈的状态 public = request.POST.get("public_status") read = request.POST.get("read_status", "unread") solve = request.POST.get("solve_status", "solving") # 成功反馈信息 succeed_message = [] # 一、修改已读状态 # 只有已读条目才可以进行后续的修改 if feedback.read_status == Feedback.ReadStatus.UNREAD: # 只有组织可以修改已读状态 if request.user.is_org() and feedback.org == me: if read != "read": return redirect(message_url(wrong("必须先设置为已读!"), request.path)) with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) if read == "read": feedback.read_status = Feedback.ReadStatus.READ feedback.solve_status = Feedback.SolveStatus.SOLVING # 已读条目不允许恢复为未读 # elif read == "unread": # feedback.read_status = Feedback.ReadStatus.UNREAD feedback.save() succeed_message.append("成功修改状态为【已读】!") inform_notification(me, feedback.person, f"您的反馈[{feedback.title}]已知悉。", feedback, important=True) # 其他人没有标记已读权限 else: return redirect(message_url(wrong("没有修改已读状态的权限!"), request.path)) # 二、修改解决状态 feedback = Feedback.objects.activated().get(id=fid) # 只有已读条目才可以修改解决状态;只有已解决/无法解决的条目才可以修改后续状态 if feedback.solve_status == Feedback.SolveStatus.SOLVING: # 只有组织可以修改解决状态 if request.user.is_org() and feedback.org == me: # 只有已读条目才可以修改解决状态: if feedback.read_status != Feedback.ReadStatus.READ: return redirect(message_url(wrong("只有已读反馈可以修改解决状态!"), request.path)) with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) # 修改为已解决 if solve == "solve": feedback.solve_status = Feedback.SolveStatus.SOLVED # 修改为无法解决 elif solve == "unsolvable": feedback.solve_status = Feedback.SolveStatus.UNSOLVABLE feedback.save() if solve != "solving": succeed_message.append( f"成功修改解决状态为【{feedback.get_solve_status_display()}】") inform_notification( me, feedback.person, f"您的反馈[{feedback.title}]已修改状态为" +f"【{feedback.get_solve_status_display()}】。", feedback, important=True, ) # 其他人没有修改解决状态权限 # else: # return redirect(message_url(wrong("没有修改解决状态的权限!"), request.path)) # 三、公开反馈信息 feedback = Feedback.objects.activated().get(id=fid) if public == "public": # 组织选择公开反馈 if request.user.is_org() and feedback.org == me: # 只有完成的反馈可以公开。另外组织已公开的反馈必然已完成 if feedback.solve_status in [ Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED, ]: return redirect(message_url( wrong("只有已解决/无法解决的反馈才可以公开"), request.path)) # 若老师不予公开,则不允许修改 if feedback.public_status == Feedback.PublicStatus.FORCE_PRIVATE: return redirect(message_url( wrong("审核教师已设置不予公开!"), request.path)) # 若个人不公开 if feedback.publisher_public == False: return redirect(message_url( wrong("根据反馈人的设置,你无法公开这一反馈结果。" + "如果以后遇到希望公开的反馈,请在状态为【解决中】时提醒用户调整状态为【公开】!"), request.path)) # 若老师没有不予公开,则修改组织公开状态 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.org_public = True feedback.save() succeed_message.append("成功修改组织公开状态为【公开】!通过学院审核后,该反馈将向所有人公开。") inform_notification(me, feedback.person, f"已申请公开您的反馈[{feedback.title}],等待老师审核。", feedback) # 此时若发布者也选择公开,则向老师发送通知消息,提醒审核 if feedback.publisher_public: examine_notification(feedback) # 发布者(个人)选择公开反馈 elif request.user.is_person() and feedback.person == me: # 若老师不予公开,则不允许修改 if feedback.public_status == Feedback.PublicStatus.FORCE_PRIVATE: return redirect(message_url(wrong("审核教师已设置不予公开!"), request.path)) # 若老师没有不予公开,则修改发布者公开状态 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.publisher_public = True feedback.save() succeed_message.append("成功修改个人公开状态为【公开】!待小组公开并通过学院审核后,该反馈将向所有人公开。") # 此时若组织也选择公开,则向老师发送通知消息,提醒审核 if feedback.org_public: examine_notification(feedback) # 教师选择公开反馈 elif ( request.user.is_person() and me.is_teacher() ): # 若组织或发布者有不公开的意愿,则教师不能公开 if (feedback.publisher_public != True or feedback.org_public != True): return redirect(message_url(wrong("小组/个人没有选择公开反馈!"), request.path)) # 教师可以公开组织和发布者均公开的反馈 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.public_status = Feedback.PublicStatus.PUBLIC feedback.save() # 为提出者增加元气值 User.objects.modify_YQPoint(feedback.person.get_user(), CONFIG.yqpoint.per_feedback, "问题反馈", YQPointRecord.SourceType.FEEDBACK) succeed_message.append("成功修改反馈公开状态为【公开】!所有学生都有访问权限。") inform_notification(me, feedback.person, f"已公开您的反馈[{feedback.title}]。", feedback, anonymous=False) inform_notification(me, feedback.org, f"已公开您处理的反馈[{feedback.title}]。", feedback, anonymous=False) # 其他人没有公开反馈权限 else: return redirect(message_url(wrong("没有公开该反馈的权限!"), request.path)) else: if request.user.is_org() and feedback.org == me: # 修改组织公开状态 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.org_public = False if feedback.public_status == Feedback.PublicStatus.PUBLIC: feedback.public_status = Feedback.PublicStatus.PRIVATE feedback.save() succeed_message.append("成功修改组织公开状态为【不公开】!") inform_notification(me, feedback.person, f"组织设置您的反馈[{feedback.title}]状态为【不公开】。", feedback) # 四、隐藏反馈信息 feedback = Feedback.objects.activated().get(id=fid) if public == "private": # 小组和个人公开反馈后,暂不允许恢复隐藏状态 # 组织选择隐藏反馈 if request.user.is_org() and feedback.org == me: pass """ # 小组已公开不允许恢复隐藏,因此不采取任何操作 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.org_public = False # 此时若老师没有不予公开,则隐藏反馈状态 if feedback.public_status != Feedback.PublicStatus.FORCE_PRIVATE: feedback.public_status = Feedback.PublicStatus.PRIVATE feedback.save() """ # 发布者(个人)选择隐藏反馈 elif request.user.is_person() and feedback.person == me: pass """ # 发布者已公开不允许恢复隐藏,因此不采取任何操作 with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.publisher_public = False # 此时若老师没有不予公开,则隐藏反馈状态 if feedback.public_status != Feedback.PublicStatus.FORCE_PRIVATE: feedback.public_status = Feedback.PublicStatus.PRIVATE feedback.save() """ # 教师选择隐藏反馈 elif ( request.user.is_person() and me.is_teacher() ): with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) # 教师为不予公开 feedback.public_status = Feedback.PublicStatus.FORCE_PRIVATE feedback.save() succeed_message.append("成功修改反馈状态为【不予公开】,除发布者和小组外均无访问权限。") inform_notification(me, feedback.person, f"暂不公开您的反馈[{feedback.title}]。", feedback, anonymous=False) inform_notification(me, feedback.org, f"暂不公开您处理的反馈[{feedback.title}]。", feedback, anonymous=False) # 其他人没有隐藏反馈权限 else: return redirect(message_url(wrong("没有隐藏该反馈的权限!"), request.path)) """撤销反馈修改为聚合页面进行,这里暂时不用 # 五、撤销反馈 if request.POST.get("post_type") == "cancel": # 只有发布者可以撤销反馈 if feedback.person == me: # 已完成的反馈不允许撤回 if feedback.solve_status != Feedback.SolveStatus.SOLVING: return redirect(message_url(wrong("只有未解决的反馈才可以撤回"), request.path)) with transaction.atomic(): feedback = Feedback.objects.activated().select_for_update().get(id=fid) feedback.issue_status = Feedback.IssueStatus.DELETED feedback.save() succeed_message.append("成功撤销反馈!") """ # 如果有任何数据库操作,都需要提示操作成功 if succeed_message: return redirect(message_url(succeed(",".join(succeed_message)), request.path)) # 使用 GET 方法访问,展示页面 # 首先确定不同用户对反馈的评论和修改权限 read = feedback.get_read_status_display() solve = feedback.get_solve_status_display() public = False is_person = feedback.person == me commentable = False public_editable = False read_editable = False solve_editable = False cancel_editable = False # 不允许修改反馈标题和反馈内容 form_editable = False # 一、当前登录用户为发布者 if request.user.is_person() and feedback.person == me: login_identity = "publisher" # 未结束反馈发布者可评论,可撤销 if feedback.solve_status in (Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED): commentable = True # 撤销反馈功能迁移到反馈聚合页面 # cancel_editable = True # 未公开反馈,且老师没有设置成不予公开时,发布者可修改自身公开状态 if (not feedback.publisher_public) and feedback.public_status != Feedback.PublicStatus.FORCE_PRIVATE: public_editable = True # 二、当前登录用户为老师 elif request.user.is_person() and me.is_teacher(): login_identity = "teacher" # 未结束反馈可评论 if feedback.solve_status in (Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED): commentable = True # 所有反馈老师可修改公开状态 public_editable = True if feedback.public_status == Feedback.PublicStatus.PUBLIC: public = True # 未结束反馈可评论 if feedback.solve_status in (Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED): commentable = True # 三、当前登录用户为发布者和老师以外的个人 elif request.user.is_person(): # 检查当前个人是否具有访问权限,只有公开反馈有访问权限 if feedback.public_status == Feedback.PublicStatus.PUBLIC: login_identity = "student" else: # 如果是组织管理员,尝试登录 login_context = utils.user_login_org(request, feedback.org) if login_context["warn_code"] == SUCCEED: return redirect(message_url(login_context, request.path)) return redirect(message_url(wrong("该反馈尚未公开,没有访问该反馈的权限!"), '/feedback/')) # 四、当前登录用户为受反馈小组 elif request.user.is_org() and feedback.org == me: login_identity = "org" # 未读反馈可修改未为已读 if feedback.read_status == Feedback.ReadStatus.UNREAD: read_editable = True # 未结束反馈可修改为已结束,并且可以评论 if feedback.solve_status in (Feedback.SolveStatus.SOLVING, Feedback.SolveStatus.UNMARKED): solve_editable = True commentable = True # 个人愿意公开,老师没有设置成不予公开时,组织可修改自身公开状态 if feedback.public_status != Feedback.PublicStatus.FORCE_PRIVATE: public_editable = True # 其他用户(非受反馈小组)暂时不开放任何权限 else: return redirect(message_url(wrong("没有访问该反馈的权限"), '/feedback/')) # 撤销反馈、公开反馈、标记已读、修改解决状态需要表单操作 # 撤销反馈迁移到反馈聚合页面 form_editable = public_editable or read_editable or solve_editable bar_display = utils.get_sidebar_and_navbar(request.user, navbar_name="反馈信息") title = feedback.title comments = showComment(feedback, anonymous_users=[feedback.person.person_id]) return render(request, "feedback/info.html", locals())
[文档] @login_required(redirect_field_name='origin') @utils.check_user_access(redirect_url="/logout/") @logger.secure_view() def feedbackWelcome(request: HttpRequest): html_display = {} is_person = request.user.is_person() me = get_person_or_org(request.user) # 如果有argue参数,说明是从申诉页面跳转过来的 if 'argue' in request.GET.keys() and request.session.has_key('feedback_type'): if not request.session.has_key('feedback_url'): # 弹出 feedback_type = request.session.pop('feedback_type') else: feedback_type = request.session['feedback_type'] feedback_url = request.session['feedback_url'] try: # 获取最新的反馈,如果已被删除则创建新的反馈 feedback = Feedback.objects.activated().filter( url=feedback_url).order_by('-feedback_time')[0] request.session.pop('feedback_type') request.session.pop('feedback_url') request.session.pop('feedback_content', '') return redirect(message_url( succeed('检测到您填写的申诉内容,已自动跳转'), feedback.get_absolute_url() )) except: # 如果没有找到对应的反馈,直接创建新的反馈 pass return redirect(f'/modifyFeedback/?type={feedback_type}') # 准备用户提示量 my_messages.transfer_message_context(request.GET, html_display) # -----------------------------反馈记录--------------------------------- issued_feedback = ( Feedback.objects.activated() .filter(issue_status=Feedback.IssueStatus.ISSUED) .order_by("-feedback_time") ) # 是否显示我的反馈 show_feedback = True if request.user.is_person(): # 教师页面不显示我的反馈 if me.is_teacher(): show_feedback = False my_feedback = issued_feedback.filter(person=me) my_all_feedback = Feedback.objects.activated().filter(person=me) else: my_feedback = issued_feedback.filter(org=me) my_all_feedback = Feedback.objects.activated().filter(org=me) undone_feedback = ( my_feedback .filter( Q(solve_status=Feedback.SolveStatus.SOLVING) | Q(solve_status=Feedback.SolveStatus.UNMARKED) ) ) done_feedback = ( my_all_feedback .filter( Q(solve_status=Feedback.SolveStatus.SOLVED) | Q(solve_status=Feedback.SolveStatus.UNSOLVABLE) ) ) # -----------------------------留言公开--------------------------------- public_feedback = ( Feedback.objects.activated() .filter(public_status=Feedback.PublicStatus.PUBLIC) .filter(issue_status=Feedback.IssueStatus.ISSUED) .order_by("-feedback_time") ) # 我已处理 # 已公开的或者强制不公开(不予公开)的是已经处理过的 process_feedback = ( Feedback.objects.activated() .filter(Q(public_status=Feedback.PublicStatus.PUBLIC) | Q(public_status=Feedback.PublicStatus.FORCE_PRIVATE)) .filter(issue_status=Feedback.IssueStatus.ISSUED) .order_by("-feedback_time") ) # -----------------------------反馈草稿--------------------------------- # 准备需要呈现的内容 # 这里应该呈现:所有person为自己的feedback draft_feedback = my_all_feedback.filter(issue_status=Feedback.IssueStatus.DRAFTED) # -----------------------------老师审核--------------------------------- is_teacher = me.is_teacher() if is_person else False my_wait_public = [] my_public_feedback = [] my_process_feedback = [] # 我已处理列表 wait_public = ( issued_feedback .filter(publisher_public=True, org_public=True) .filter(public_status=Feedback.PublicStatus.PRIVATE) ) if is_teacher: for feedback in wait_public: can_show = me.incharge.filter(otype_id=feedback.org.otype_id) if can_show.exists(): my_wait_public.append(feedback) for feedback in public_feedback: can_show = me.incharge.filter(otype_id=feedback.org.otype_id) if can_show.exists(): my_public_feedback.append(feedback) # 获取我已处理列表 for feedback in process_feedback: can_show = me.incharge.filter(otype_id=feedback.org.otype_id) if can_show.exists(): my_process_feedback.append(feedback) if request.method == "POST": option = request.POST.get("option") if not is_person: return redirect(message_url(wrong('组织不可以撤回/删除反馈!'), request.path)) if option not in ["delete", "withdraw"]: return redirect(message_url(wrong('无效的请求!'), request.path)) if option == "delete": try: del_feedback = Feedback.objects.activated().get( id=request.POST["id"]) except Exception: return redirect(message_url(wrong("不存在这样的反馈!"), request.path)) # 合法性检查 if del_feedback.issue_status == Feedback.IssueStatus.ISSUED: return redirect(message_url(wrong('不能删除已经发布的反馈!'), request.path)) with transaction.atomic(): del_feedback.issue_status = Feedback.IssueStatus.DELETED del_feedback.save() succeed('成功删除反馈草稿!', html_display) elif option == "withdraw": try: del_feedback = Feedback.objects.activated().get( id=request.POST["id"]) except Exception: return redirect(message_url(wrong("不存在这样的反馈!"), request.path)) # 合法性检查 if del_feedback.issue_status != Feedback.IssueStatus.ISSUED: return redirect(message_url(wrong('不能撤回没有发布的反馈!'), request.path)) if del_feedback.solve_status in [ Feedback.SolveStatus.SOLVED, Feedback.SolveStatus.UNSOLVABLE, ]: return redirect(message_url(wrong('不能撤回已经发布的反馈!'), request.path)) with transaction.atomic(): del_feedback.issue_status = Feedback.IssueStatus.DELETED del_feedback.save() succeed('成功撤回反馈!', html_display) bar_display = utils.get_sidebar_and_navbar(request.user, navbar_name="反馈中心") return render(request, "feedback/welcome.html", locals())
[文档] @login_required(redirect_field_name='origin') @utils.check_user_access(redirect_url="/logout/") @logger.secure_view() def modifyFeedback(request: HttpRequest): ''' 反馈表单填写、修改与提交的视图函数 ''' html_display = {} me = get_person_or_org(request.user) # 设置feedback为None, 如果非None则自动覆盖 feedback = None # 根据是否有newid来判断是否是第一次 feedback_id = request.GET.get("feedback_id") # 获取前端页面中可能存在的提示 my_messages.transfer_message_context(request.GET, html_display) if feedback_id is not None: # 如果存在对应反馈 try: # 尝试读取已有的Feedback存档 feedback = Feedback.objects.activated().get(id=feedback_id) # 接下来检查是否有权限check这个条目,应该是本人/对应组织 assert (feedback.person == me) or (feedback.org == me) except: #恶意跳转 return redirect(message_url(wrong("您没有权限访问该网址!"))) is_new_feedback = False # 前端使用量, 表示是已有的反馈还是新的 else: # 如果不存在id, 是一个新建反馈页面。 feedback = None is_new_feedback = True ''' 至此,如果是新反馈那么feedback为None,否则为对应反馈 feedback = None只有在个人新建反馈的时候才可能出现,对应为is_new_feedback 接下来POST ''' if request.method == "POST": context = update_feedback(feedback, me, request) if context["warn_code"] == 2: # 成功修改 feedback: Feedback = Feedback.objects.activated().get( id=context["feedback_id"]) is_new_application = False # 状态变更 unlock_achievement(request.user, "使用一次反馈中心") # 解锁成就-使用一次反馈中心 # 处理通知相关的操作 try: feasible_post = [ "directly_submit", "submit_draft", ] if request.POST.get('post_type') in feasible_post: make_relevant_notification(feedback, request.POST, me) except: return redirect(message_url( wrong("返回了未知类型的post_type,请注意检查!"), request.path)) elif context["warn_code"] != 1: # 没有返回操作提示 return redirect(message_url( wrong("在处理反馈中出现了未预见状态,请联系管理员处理!"), request.path)) # 准备用户提示量 my_messages.transfer_message_context(context, html_display) # 为了保证稳定性,完成POST操作后同意全体回调函数,进入GET状态 if feedback is None: return redirect(message_url(context, '/modifyFeedback/')) else: return redirect(message_url(context, feedback.get_absolute_url())) # ———————— 完成Post操作, 接下来开始准备前端呈现 ———————— # 首先是写死的前端量 feedback_type_list = { fbtype.name:{ 'value' : fbtype.name, 'display' : fbtype.name, # 前端呈现的使用量 'disabled' : False, # 是否禁止选择这个量 'selected' : False # 是否默认选中这个量 } for fbtype in FeedbackType.objects.all() } org_type_list = { otype.otype_name:{ 'value' : otype.otype_name, 'display' : otype.otype_name, # 前端呈现的使用量 'disabled' : False, # 是否禁止选择这个量 'selected' : False # 是否默认选中这个量 } for otype in OrganizationType.objects.all() } org_list = { org.oname:{ 'value' : org.oname, 'display' : org.oname, # 前端呈现的使用量 'disabled' : False, # 是否禁止选择这个量 'selected' : False # 是否默认选中这个量 } for org in Organization.objects.all() } org_type_list[''] = { 'value': '', 'display': '', 'disabled': False, 'selected': False, } org_list[''] = { 'value': '', 'display': '', 'disabled': False, 'selected': False, } # 用户写表格? if (is_new_feedback or (feedback.person == me and feedback.issue_status == Feedback.IssueStatus.DRAFTED)): allow_form_edit = True else: allow_form_edit = False # 用于前端展示 feedback_person = me if is_new_feedback else feedback.person app_avatar_path = feedback_person.get_user_ava() all_org_types = [otype.otype_name for otype in OrganizationType.objects.all()] all_org_list = [] for otype in all_org_types: all_org_list.append(([otype,] + [org.oname for org in Organization.objects.filter( otype=OrganizationType.objects.get(otype_name=otype) )]) if otype != '' else ([otype,] + [ org.oname for org in Organization.objects.all() ]) ) fbtype_to_org = [] #存有多个列表,每个列表为[fbtype, orgtype, org],用于前端变换下拉选项 for fbtype in feedback_type_list.keys(): fbtype_obj = FeedbackType.objects.get(name=fbtype) fbtype_to_org.append([fbtype,] + ([ fbtype_obj.org_type.otype_name, ] if fbtype_obj.org_type else ['',]) + ([ fbtype_obj.org.oname, ] if fbtype_obj.org else ['',]) ) if not is_new_feedback: feedback_type_list[feedback.type.name]['selected'] = True if feedback.org_type is not None: org_type_list[feedback.org_type.otype_name]['selected'] = True for org in Organization.objects.exclude( otype=OrganizationType.objects.get( otype_name=feedback.org_type.otype_name) ): org_list[org.oname]['disabled'] = True else: org_type_list['']['selected'] = True for org in org_list.keys(): org_list[org]['disabled'] = True if feedback.org is not None: org_list[feedback.org.oname]['selected'] = True else: org_list['']['selected'] = True else: # feedback_type默认选中的反馈类型通过GET获取,如未获取到则默认选中第一项。 try: feedback_type = request.GET['type'] FeedbackType.objects.get(name=feedback_type) except: # 有可能出现需要的反馈类型数据库不存在的情况,此时默认选中第一项 feedback_type = list(feedback_type_list.keys())[0] feedback_type_list[feedback_type]['selected'] = True selected_feedback = FeedbackType.objects.get(name=feedback_type) if selected_feedback.org_type is not None: org_type_list[selected_feedback.org_type.otype_name]['selected'] = True for org in Organization.objects.exclude( otype=OrganizationType.objects.get( otype_name=selected_feedback.org_type.otype_name) ): org_list[org.oname]['disabled'] = True else: org_type_list['']['selected'] = True for org in org_list.keys(): org_list[org]['disabled'] = True if selected_feedback.org is not None: org_list[selected_feedback.org.oname]['selected'] = True else: org_list['']['selected'] = True # 从session弹出默认反馈内容 default_content = request.session.pop('feedback_content', '') bar_display = utils.get_sidebar_and_navbar( request.user, navbar_name="填写反馈" if is_new_feedback else "反馈详情" ) return render(request, "feedback/modify.html", locals())