Django实现职位同步至雇主专属管理页面技术问询
实现方案
1. 关联职位与雇主(修改models.py)
首先需要给Job模型添加与雇主用户的关联,这样才能区分每个职位所属的雇主:
class Job(models.Model): # 新增外键关联Account,删除用户时同步删除其所有职位 employer = models.ForeignKey('Account', on_delete=models.CASCADE, null=True, related_name='jobs') company = models.CharField(max_length=40, null=True, verbose_name="Company/Employer") description = models.TextField(null=True) role = models.CharField(max_length=25) area_of_filming = models.CharField(max_length=50, verbose_name="Area Of Filming", default="") contact_email = models.EmailField(verbose_name='Contact Email', max_length=60, default='') created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.company
2. 完善职位发布与管理逻辑(修改views.py)
更新manage_jobs视图,确保发布的职位绑定当前登录雇主,同时获取该雇主的所有职位用于展示;新增编辑、删除职位的视图:
from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth.decorators import login_required from base.forms import JobForm from base.models import Job @login_required(login_url='login') def manage_jobs(request): if request.user.is_employee: return redirect('home') # 获取当前雇主的所有职位 user_jobs = Job.objects.filter(employer=request.user) if request.method == 'POST': form = JobForm(request.POST) if form.is_valid(): job = form.save(commit=False) # 将职位关联到当前登录的雇主 job.employer = request.user job.save() # 提交后刷新页面,避免重复提交 return redirect('manage-jobs') else: # GET请求初始化空表单 form = JobForm() context = {"form": form, "user_jobs": user_jobs} return render(request, 'employer/manage-jobs.html', context) # 职位编辑视图 @login_required(login_url='login') def edit_job(request, job_id): if request.user.is_employee: return redirect('home') # 确保只能编辑自己的职位 job = get_object_or_404(Job, id=job_id, employer=request.user) if request.method == 'POST': form = JobForm(request.POST, instance=job) if form.is_valid(): form.save() return redirect('manage-jobs') else: form = JobForm(instance=job) context = {"form": form, "job": job} return render(request, 'employer/edit-job.html', context) # 职位删除视图 @login_required(login_url='login') def delete_job(request, job_id): if request.user.is_employee: return redirect('home') job = get_object_or_404(Job, id=job_id, employer=request.user) job.delete() return redirect('manage-jobs')
3. 更新URL配置(修改urls.py)
添加编辑、删除职位的路由:
from django.urls import path from . import views urlpatterns = [ path('', views.manage_jobs, name='manage-jobs'), path('edit/<int:job_id>/', views.edit_job, name='edit-job'), path('delete/<int:job_id>/', views.delete_job, name='delete-job'), ]
4. 修改模板展示雇主职位列表(修改manage-jobs.html)
在模板中添加雇主的职位列表,以及编辑、删除操作按钮:
<body> <button id="myBtn">Post A Job</button> <!-- 新增:展示当前雇主的职位列表 --> <div id="job-list"> <h3>My Posted Jobs</h3> {% if user_jobs %} {% for job in user_jobs %} <div class="job-item"> <h4>{{ job.role }} - {{ job.company }}</h4> <p>{{ job.description|truncatewords:20 }}</p> <p>Filming Area: {{ job.area_of_filming }}</p> <a href="{% url 'edit-job' job.id %}">Edit</a> <a href="{% url 'delete-job' job.id %}" onclick="return confirm('确认删除该职位吗?')">Delete</a> </div> {% endfor %} {% else %} <p>你还没有发布任何职位</p> {% endif %} </div> <div id="main"></div> <div id="myModal" class="modal"> <div class="modal-content"> <span class="close">×</span> <form action="" method="POST"> {% csrf_token %} <div id="company-container"> <p>Employer Name</p> <p id="employer">{{form.company}}</p> </div> <div id="role-container"> <p>Role (e.g. Actor, Director)</p> <p id="role">{{form.role}}</p> </div> <div class="area-of-filming-container"> <p>Area Of Production/Filming</p> <p id="area-of-filming">{{form.area_of_filming}}</p> </div> <div id="contact-email-container"> <p>Contact Email</p> <p id="contact-email">{{form.contact_email}}</p> </div> <div id="description-container"> <p>Description Of Job</p> <p id="description">{{form.description}}</p> </div> <button type="submit" id="post-job">Publish Job</button> </form> </div> </div> <script src="{% static 'lng/js/manage-jobs.js' %}" type="text/javascript" ></script> </body>
5. 新增编辑职位模板(创建edit-job.html)
创建编辑职位的模板,结构与发布模板一致:
<body> <h3>Edit Job</h3> <form action="{% url 'edit-job' job.id %}" method="POST"> {% csrf_token %} <div id="company-container"> <p>Employer Name</p> <p id="employer">{{form.company}}</p> </div> <div id="role-container"> <p>Role (e.g. Actor, Director)</p> <p id="role">{{form.role}}</p> </div> <div class="area-of-filming-container"> <p>Area Of Production/Filming</p> <p id="area-of-filming">{{form.area_of_filming}}</p> </div> <div id="contact-email-container"> <p>Contact Email</p> <p id="contact-email">{{form.contact_email}}</p> </div> <div id="description-container"> <p>Description Of Job</p> <p id="description">{{form.description}}</p> </div> <button type="submit" id="update-job">Update Job</button> <a href="{% url 'manage-jobs' %}">Cancel</a> </form> </body>
关键说明
- 模型关联:通过
ForeignKey绑定Job与Account,确保每个职位都归属到对应的雇主,related_name='jobs'可通过request.user.jobs快速获取用户所有职位。 - 权限控制:编辑、删除视图中通过
get_object_or_404限定用户只能操作自己发布的职位,防止越权。 - 体验优化:发布时自动关联当前用户,无需手动选择;编辑时加载已有职位数据,提升操作效率。
内容的提问来源于stack exchange,提问作者Ruairí
相关产品推荐
相关产品推荐

