Связать поля идентификатора внешнего ключа без миграций - PullRequest
0 голосов
/ 08 октября 2019

В настоящее время я пытаюсь выяснить, как связать два поля идентификатора двух разных моделей из существующей базы данных без сценариев миграции.

Я рассмотрел много, много разных решений;Поля models.ForeignKey, models.ManyToOneRel, гиперссылки на поля в сериализаторе, PrimaryKeyRelatedField в сериализаторе, кажется, что каждое из них соответствует модели другой модели или другому сеансу и не совпадает между двумя конкретными полями идентификатора в двух разных моделях.

Это код, с которым я сейчас работаю;он использует rsinger86 drf-flex-fields , чтобы разрешить спроектированные расширяемые поля.

class Cats(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid3, editable=False)
    hatId = models.UUIDField(primary_key=False, default=uuid.uuid3, editable=False)
    name = models.TextField()

class Hats(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid3, editable=False)
    name = models.TextField()


class CatsSerializer(FlexFieldsModelSerializer):
    hat = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = Cats
        fields = [
            'id',
            'hatId',
            'name'
        ]
        expandable_fields = {
            'hat': (HatsSerializer, {'source': 'hat', 'fields': ['name']})
        }

class HatsSerializer(FlexFieldsModelSerializer):

    class Meta:
        model = Hats
        fields = [
            'id',
            'name'
        ]

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

1 Ответ

0 голосов
/ 08 октября 2019

У меня был похожий вариант использования в моем проекте, и ForeignKey работал нормально:

hatId = models.ForeignKey(Hat, on_delete=models.DO_NOTHING, related_name='HatId')

Django docs ForeignKey.to_field

По умолчанию, Django использует первичный ключ связанного объекта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...