首页 > 解决方案 > AttributeError:尝试获取字段值时出现 AttributeError

问题描述

**job model**
class JobPost(models.Model):
        creater = models.ForeignKey(
            settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
        title = models.CharField(max_length=255)
        job_type = models.ForeignKey(
            JobType, on_delete=models.CASCADE)
        job_loc = models.ForeignKey(JobLocation, on_delete=models.CASCADE)
        cmpny_name = models.ForeignKey(
            Company, related_name='company', on_delete=models.CASCADE)
        created_date = models.DateField(auto_now_add=True)
        job_description = models.CharField(max_length=255)
        salary = models.DecimalField(max_digits=10, decimal_places=2)
    
        def __str__(self):
            return str(self.job_type)

公司序列化程序

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = '__all__'

后序列化程序

class PostSerializer(serializers.ModelSerializer):
    # job_loc = JoblocationSerializer(many=True)
    companies = CompanySerializer(source='company', many=True)

    class Meta:
        model = JobPost
        fields = '__all__'

我得到的错误

AttributeError:尝试获取companies序列化程序上的字段值时出现 AttributeError PostSerializer。序列化器字段可能命名不正确,并且与 JobPost实例上的任何属性或键都不匹配。原始异常文本是:“JobPost”对象没有属性“公司”。

标签: djangodjango-rest-framework

解决方案


对于源属性,您需要从 JobPost 端放置关系名称,因为它被称为cmpny_name您应该使用它。

并且您不应该使用many=Truekwarg,因为它与 JobPost 端的 ForiegnKey 关系每个帖子仅与一家公司相关。

因此,所有这些将是:

cmpny_name = CompanySerializer()

推荐阅读