Как мне решить следующую ошибку сериализатора 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)