Как мне решить следующую ошибку сериализатора Django: TypeError: аргумент int() должен быть строкой, байтоподобным объектом или числом, а не 'Article'

Я совсем новичок в django, но не могу найти решение в документации

Мой вопрос:

У меня есть модель с 2 отношениями OneToOne:


class Slotting(ICSBaseMixin):
    # database fields
    article = models.OneToOneField(
        "ics_stock.Article",
        on_delete=models.CASCADE,
        related_name="slotting",
        null=False
    )
    article_location = models.OneToOneField(
        "ics_stock.ArticleLocation",
        on_delete=models.CASCADE,
        null=False,
        related_name="slotting"
    )

    def __str__(self):
        return str(self.record_id)

    class Meta:
        db_table = "ICS_Stock_Slotting"
        verbose_name = "Slotting"
        verbose_name_plural = "Slottings" # noqa

Я хочу создать и сохранить новый экземпляр через сериализатор.

serializer:


class SlottingCreateUpdateSerializer(serializers.ModelSerializer):
    def update(self, instance, validated_data):
        article = validated_data.pop("article")
        instance.article_id = article

        article_location = validated_data.pop("article_location")
        instance.article_location_id = article_location

        instance.save()
        return instance

    def create(self, validated_data):
        article_id = validated_data.pop("article")
        article = get_object_or_404(
            Article,
            record_id=article_id
        )

        article_location_id = validated_data.pop("article_location")
        article_location = get_object_or_404(
            ArticleLocation,
            record_id=article_location_id
        )

        slotting = Slotting()
        slotting.article_location = article_location,
        slotting.article = article
        slotting.save()

        return slotting

Теперь при попытке сериализации и сохранения я получаю следующую ошибку:

Теперь я гуглил и искал целый день, но так и не понял, что я делаю неправильно.

Что мне нужно отрефакторить, чтобы исправить ошибку.

Итак, изменив переопределение create на следующее:

    def create(self, validated_data):
        article_id = validated_data.pop("article")
        article = get_object_or_404(
            Article,
            record_id=article_id.record_id
        )

        article_location_id = validated_data.pop("article_location")
        article_location = get_object_or_404(
            ArticleLocation,
            record_id=article_location_id.record_id
        )

        validated_data["article_id"] = article.id
        validated_data["article_location_id"] = article_location.id
        return Slotting.objects.create(**validated_data)
Вернуться на верх