Я думаю, что есть кое-что, чтобы сделать бит более понятным для вас
Django делает это:
ForeignKey определяет дополнительный атрибут с _id, добавленным к имени поля
В вашей модели есть следующее поле:
tag_id = models.ForeignKey(Tag, models.DO_NOTHING, db_column='tag_ID', primary_key=True)
Но вам не нужно указывать столбец БД или первичный ключ и делать это вместо этого:
tag = models.ForeignKey(Tag, models.DO_NOTHING)
В db столбец db для этого поля будет иметь имя tag_id (как вы хотели бы), а тип будет целочисленным.Вот почему проверка проходит.
Теперь вы можете получить доступ к идентификатору instance.tag_id
или instance.tag.id
(однако есть разница между этими двумя вызовами - один попадет в БД, если он еще не получен).
Однако в вашем случае «tag_id» - это ForeignKey, для которого требуется экземпляр «Tag».
У вас есть 2 возможных способа решения этой проблемы (при условии, что вы использовали мое предлагаемое изменение для переименования поля)
1) Вы можете использовать tag_id в своем почтовом запросе (теперь, когда имя поля меняется на tag
)
2) в вашем сериализаторе, вы можете указать следующее:
tag = serializers.PrimaryKeyRelatedField(queryset=Tag.objects.all())
, и вы можете сделать запрос с помощью
{"tag" : 1 }
, и это преобразует ваш идентификатор в экземпляр Tag (если он действителен)