TypeError: 'int' object is not iterable serializer Django Serializer for one-to-many
TypeError: 'int' object is not iterable serializer Django Serializer for one-to-many
我遇到了一个奇怪的情况,以下是我的模型代码。
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})
请帮我找出并解决问题。谢谢
您的错误似乎在以下行中:
companies = TrailCompanySerializer(source="company_id", many=True)
Trail<>TrailCompany从Trail的角度来看是一对一的关系。例如。 Trail 只知道与其相关的一个 TrailCompany。因此您不需要 many=True
属性。
我也认为来源应该是company
而不是company_id
。 company_id
是主键,而 company
是相关对象
所选答案不适合我。但是以下方法有效:
company = TrailCompanySerializer(many=True)
还记得将 company
放在 related_name
字段中,如下所示:
company = models.ForeignKey(TrailCompany, on_delete=models.CASCADE, related_name="company")
我遇到了一个奇怪的情况,以下是我的模型代码。
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})
请帮我找出并解决问题。谢谢
您的错误似乎在以下行中:
companies = TrailCompanySerializer(source="company_id", many=True)
Trail<>TrailCompany从Trail的角度来看是一对一的关系。例如。 Trail 只知道与其相关的一个 TrailCompany。因此您不需要 many=True
属性。
我也认为来源应该是company
而不是company_id
。 company_id
是主键,而 company
是相关对象
所选答案不适合我。但是以下方法有效:
company = TrailCompanySerializer(many=True)
还记得将 company
放在 related_name
字段中,如下所示:
company = models.ForeignKey(TrailCompany, on_delete=models.CASCADE, related_name="company")