You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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">&times;</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í

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:54:14