TypeError: объект 'int' не является итеративным сериализатором Django Сериализатор для одного ко многим - PullRequest
1 голос
/ 21 января 2020

Я сталкиваюсь со странной ситуацией. Ниже приведен мой код для моделей.

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__'

Когда я пытаюсь сериализовать объект I получаю указанную ошибку,

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

Пожалуйста, помогите мне разобраться и решить проблему. Благодаря.

1 Ответ

1 голос
/ 21 января 2020

Похоже, ваша ошибка в следующей строке:

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

Trail <> TrailCompany - это отношение один к одному с точки зрения Trail. Например, Трейл знает только одну Трейл Компанию, с которой он связан. Поэтому вам не нужен атрибут many=True.

Я также думаю, что источник должен быть company, а не company_id. company_id является первичным ключом, тогда как company является связанным объектом

...