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

Django中Job按用户过滤无数据,如何设置contact_email默认值?

用户专属Job渲染及默认邮箱设置问题解决方案

问题背景

  1. 使用Job.objects.filter(user = request.user)无法渲染用户发布的Job实例,但Job.objects.all()可正常展示所有数据,目标是仅显示当前登录用户发布的内容。
  2. 当前通过contact_email=request.user.email过滤虽可行,但用户可在表单中随意填写邮箱;计划移除表单的contact_email字段,自动将其设为当前登录用户的邮箱,多次尝试未成功。

一、修复用户专属Job过滤失效问题

问题根源

创建Job时未将user字段关联到当前登录用户,导致数据库中Job的user字段为空,过滤时无匹配结果。

解决方案:修改视图保存逻辑

更新views.py中的manage_jobs函数,在保存Job时手动关联当前用户:

@login_required(login_url='login')
def manage_jobs(request):
    if request.user.is_employee:
        return redirect('home')
    
    # 兼容GET/POST请求,GET时初始化空表单
    form = JobForm(request.POST or None)
    
    if request.method == 'POST' and form.is_valid():
        # 获取未保存的Job实例
        job_instance = form.save(commit=False)
        # 关联当前登录用户
        job_instance.user = request.user
        # 自动填充联系邮箱为用户邮箱
        job_instance.contact_email = request.user.email
        # 保存到数据库
        job_instance.save()
        # 重定向避免重复提交
        return redirect('manage-jobs')
    
    # 现在可通过user字段正确过滤
    jobs = Job.objects.filter(user=request.user)
    context = {"form": form, "jobs": jobs}
    return render(request, 'employer/manage-jobs.html', context)

二、移除表单中的contact_email字段

假设使用ModelForm创建JobForm,修改forms.py(无则新建),排除不需要用户填写的字段:

from django import forms
from .models import Job

class JobForm(forms.ModelForm):
    class Meta:
        model = Job
        # 仅保留需要用户输入的字段,排除自动填充的字段
        fields = ['company', 'description', 'role', 'area_of_filming']

三、优化模型字段配置

调整models.py中Job模型的user字段,移除不合理的默认值:

class Job(models.Model):
    # 其他字段保持不变
    user = models.ForeignKey(Account, null=True, on_delete=models.CASCADE)  # 去掉default=''

验证效果

  1. 登录用户发布新Job时,user和contact_email字段会自动填充为当前用户信息
  2. 使用Job.objects.filter(user=request.user)可正确获取该用户发布的所有Job实例

内容的提问来源于stack exchange,提问作者Ruairí

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:39:15