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 значит вводить в заблуждение.

Вернуться на верх