Django _id в модели FK
Я делаю API из существующей базы данных (что означает, что нет возможности изменить схему БД) с помощью Django и rest_framework. У меня есть 2 таблицы, Foos и Bars.
foo_id
1
2
bar_id | foo_id (FK)
1 |1
2 |2
Модель баров:
foo = models.ForeignKey('Foos', on_delete=models.CASCADE)
Модель Django изменяет de 'foo_id' FK только на 'foo'. Есть ли способ сохранить FK с суффиксом '_id'?
Я бы предложил указать поле, которое вы хотите использовать в качестве FK (foos_id в вашем случае).
models.ForeignKey(
Foos,
on_delete=models.CASCADE,
to_field='id'
)
Исправлено использование:
foo_id = models.ForeignKey('Foos', on_delete=models.CASCADE, db_column='foo_id')
Вы можете сделать это в сериализаторе с помощью:
from rest_framework import serializers
class BarSerializer(serializers.ModelSerializer):
foo_id = serializers.PrimaryKeyRelatedField(source='foo')
class Meta:
model = Bar
fields = ['foo_id']
или даже просто:
from rest_framework import serializers
class BarSerializer(serializers.ModelSerializer):
class Meta:
model = Bar
fields = ['foo_id']
Давать полю модели имя foo_id
, однако, не имеет смысла: если вы обращаетесь к bar_object.foo
, вы получаете Foo
объект, а не идентификатор Foo
объекта, поэтому называть его foo_id
значит вводить в заблуждение.