【问题标题】:AttributeError: Got AttributeError when attempting to get a value for fieldAttributeError:尝试获取字段值时出现 AttributeError
【发布时间】:2021-07-15 12:08:31
【问题描述】:
**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:尝试获取值时出现 AttributeError 序列化程序PostSerializer 上的字段companies。序列化器字段 可能命名不正确并且不匹配任何属性或键 JobPost 实例。原始异常文本是:“JobPost”对象具有 没有属性“公司”。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

    您不应该使用many=True kwarg,因为它与 JobPost 端的 ForiegnKey 关系每个帖子只会与单个公司相关。

    所有这些都将是:

    cmpny_name = CompanySerializer()
    

    【讨论】:

    • 感谢工作就像魅力一样,我被困了好几个小时
    • 什么是源用于而不是反向关系我对此有点困惑,试图了解它
    • 它可用于从模型本身中获取任何可调用或属性的值,甚至可以从模型中获取嵌套属性
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2023-02-03
    • 2022-11-29
    • 1970-01-01
    • 2022-08-11
    相关资源
    最近更新 更多