Django Generic Views使用Serializer类时无法识别Model字段异常求解
AttributeError: Got AttributeError when attempting to get a value for field
template_nameon serializerListJobTemplateSerializer.
The serializer field might be named incorrectly and not match any attribute or key on theJobinstance.
Original exception text was: 'Job' object has no attribute 'template_name'.
异常触发原因
核心原因是你给绑定了JobTemplate模型的ListJobTemplateSerializer序列化器,传入了Job模型的实例/查询集作为数据源,Job模型本身就不存在template_name字段,直接触发属性不存在错误。
除此之外你的代码还有三个隐藏问题,即使修复数据源后也会报错:
JobTemplate模型的外键命名不符合语义:ForeignKey是多对一关联,单个JobTemplate只能关联一个Job,字段名设为复数jobs容易引发误用;同时related_name="%(class)s"的配置会导致Job实例反向查关联模板的属性名为jobtemplate,语义不清晰。ListJobTemplateSerializer的job_title字段source配置错误:你写了source="name",但JobTemplate模型本身没有name字段,无法读取到关联Job的名称。JobTemplate的__str__方法返回不存在的name属性,调用该方法时会直接报错。
解决办法
1. 修正视图层的数据源传入逻辑
确保传给ListJobTemplateSerializer的是JobTemplate类型的查询集/实例:
- 如果要查询单个Job关联的所有模板,正确的查询集写法是
JobTemplate.objects.filter(job=目标Job实例),不要直接把Job实例丢给序列化器。 - 如果你需要在序列化Job的时候直接带出关联的模板列表,要单独给Job写嵌套序列化器,不能直接用
ListJobTemplateSerializer序列化Job实例。
2. 修正模型和序列化器的错误配置
修正JobTemplate模型
class JobTemplate(Dates, ID): template_name = models.CharField(max_length=255) # 修改外键名和related_name,符合语义 job = models.ForeignKey(to="jobs.Job", related_name="job_templates", on_delete=models.CASCADE) objects = BulkUpdateOrCreateQuerySet.as_manager() class Meta: db_table = 'job_template' # 修正返回字段为存在的template_name def __str__(self): return self.template_name
修正ListJobTemplateSerializer配置
class ListJobTemplateSerializer(serializers.ModelSerializer): """List all templates of a job.""" # 修改source指向关联Job的name字段 job_title = serializers.CharField(source="job.name") class Meta: model = JobTemplate fields = ["id", "job_title", "template_name"]
(可选)新增Job嵌套序列化器
如果需要序列化Job时直接带出关联的模板列表,新增以下序列化器:
class JobWithTemplatesSerializer(serializers.ModelSerializer): # 嵌套关联的模板序列化器 job_templates = ListJobTemplateSerializer(many=True) class Meta: model = Job fields = ["id", "name", "is_remote", "company", "job_templates"]
内容的提问来源于stack exchange,提问作者user9150424
相关产品推荐
相关产品推荐

