【问题标题】:TypeError: 'int' object is not iterable serializer Django Serializer for one-to-manyTypeError: 'int' object is not iterable serializer 用于一对多的 Django Serializer
【发布时间】:2021-10-05 03:20:17
【问题描述】:

我面临一个奇怪的情况,以下是我的模型代码。

class Sector(models.Model):
    sector_name = models.CharField(max_length=255, null=False)
    sector_desc = models.CharField(max_length=1024, null=False)

    def __set__(self):
        return "{} - {}".format(self.sector_name, self.sector_desc)


class TrailCompany(models.Model):
    sector = models.ForeignKey(Sector, on_delete=models.CASCADE, related_name="sector_id")
    comp_name = models.CharField(max_length=255, null=False)
    comp_desc = models.CharField(max_length=1024, null=False)

    def __set__(self):
        return "{} - {}".format(self.sector, self.comp_name, self.comp_desc)


class Trail(models.Model):
    company = models.ForeignKey(TrailCompany, on_delete=models.CASCADE, related_name="company_id")
    trail_id = models.CharField(max_length=255, null=False)
    tri = models.CharField(max_length=255, null=False)
    exp_pdufa = models.CharField(max_length=255, null=False)

    def __set__(self):
        return "{} - {}".format(self.company, self.exp_pdufa, self.trail_id, self.tri, self.exp_pdufa)

以下是我的序列化程序代码,

class SectorSerializer(serializers.ModelSerializer):

    class Meta:
        model = Sector
        fields = '__all__'


class TrailCompanySerializer(serializers.ModelSerializer):
    sectors = SectorSerializer(source="sector_id", many=True)

    class Meta:
        model = TrailCompany
        fields = '__all__'


class TrailSerializer(serializers.ModelSerializer):
    companies = TrailCompanySerializer(source="company_id", many=True)

    class Meta:
        model = Trail
        fields = '__all__'

当我尝试对对象进行序列化时,我收到了声明的错误,

trail_query = Trail.objects.all()
        trails = TrailSerializer(trail_query, many=True)
        return Response({"success": True, 'trails': trails.data})

请帮助我找出并解决问题。谢谢。

【问题讨论】:

  • 哪里出错了?
  • 亲爱的,当我尝试转到 /api/home_meta 时,它正在抛出 TypeError at /api/home_meta 'int' object is not iterable

标签: django python-3.x django-rest-framework django-serializer


【解决方案1】:

您的错误似乎在以下行中:

companies = TrailCompanySerializer(source="company_id", many=True)

TrailTrailCompany 从 Trail 的角度来看是一对一的关系。例如。 Trail 只知道与其相关的一个 TrailCompany。因此您不需要many=True 属性。

我也认为来源应该是company 而不是company_idcompany_id 是主键,而company 是相关对象

【讨论】:

    【解决方案2】:

    选定的答案对我不起作用。但是以下方式有效:

    company = TrailCompanySerializer(many=True)
    

    还记得将company 放入related_name 字段中,如下所示:

    company = models.ForeignKey(TrailCompany, on_delete=models.CASCADE, related_name="company")
    

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 2016-02-18
      • 2022-11-02
      • 1970-01-01
      • 2018-06-29
      • 2020-11-07
      • 2016-01-09
      • 2018-12-10
      • 2022-12-15
      相关资源
      最近更新 更多