Django Rest FrameWork // Условная модель OneToOneField - PullRequest
0 голосов
/ 23 марта 2020

Я разрабатываю API отдыха с Django Rest Framework для домашней страницы статистики для администратора.

Служба уже выполняется, и я прикрепил Django к базе данных, которая уже была создана.

models.py был создан с помощью managy.py inspectdb.

В существующих таблицах нет внешних ключей (или OneToOneField). Поэтому я пытаюсь создать внешний ключ самостоятельно в сгенерированном models.py.

Но я нашел таблицу, в которую вставляются PK нескольких таблиц в один столбец.

# models.py

Amodel(models.Model):
    consult_id = models.IntegerField(primary_key=True) # number start from 100,000
    ....

Bmodel(models.Model):
    note_id = models.IntegerField(primary_key=True) # number start from 1
    ....

Cmodel(models.Model):
    consult_note_id = models.IntegerField(primary_key=True) # saved 'consult_id from Amodel' and 'note_id from Bmodel' with unique property.
    ...
    what_is = models.CharField(max_length=7, ...) # saved 'consult' for consult table's data and 'note' for note table's data

Я пытается заменить этот consult_note_id в Cmodel на OneToOneField для более плавного использования ORM.

Ожидаемый код ниже.

Cmodel(models.Model):
    consult_note_id = models.OneToOneField(Amodel or Bmodel, on_delete=models.SET_NULL, null=True, blank=True, db_column='consult_note_id')
    ...
    what_is = models.CharField(max_length=7, ...)

Ожидаемый сериализованный результат

{consult_note_id : 100001, ..., what_is : consult},
{consult_note_id : 1, ..., what_is : note},
{consult_note_id : 100002, ..., what_is : consult},
{consult_note_id : 100003, ..., what_is : consult},
{consult_note_id : 2, ..., what_is : note},
{consult_note_id : 3, ..., what_is : note},
{consult_note_id : 100004, ..., what_is : consult}

Есть ли хороший способ?

...