Django один ко многим между устаревшими таблицами без отношения PK к FK - PullRequest
0 голосов
/ 24 апреля 2020

Я использую устаревшие таблицы БД, которые я не контролирую.

Таблица A имеет поле идентификатора auto_gen, как показано ниже: Таблица DRAWER (одна сторона), таблица FOLDER (много сторон)

class Drawer(models.Model):
    id = models.PositiveIntegerField(primary_key=True, db_column='ID')
    fld1 = models.CharField(max_length=1000, db_column='FLD1')
    fld2 = models.CharField(max_length=1000, db_column='FLD2')
    fld3 = models.CharField(max_length=1000, db_column='FLD3')

    def __str__(self):
        field_values = []
        for field in self._meta.get_fields():
            field_values.append(str(getattr(self, field.name, '')))
        return ' '.join(field_values)

    class Meta:
        managed = False
        db_table = u'"MySchema"."DRAWER"'




class Folder(models.Model):
    id = models.PositiveIntegerField(primary_key=True, db_column='ID')
    fld1 = models.CharField(max_length=1000, db_column='FLD1')
    fld4 = models.CharField(max_length=1000, db_column='FLD4')
    fld5 = models.CharField(max_length=1000, db_column='FLD5')
    drawer = models.ForeignKey(to=Drawer, related_name='Drawer.fld1+', on_delete=models.CASCADE, db_constraint=False)

    def __str__(self):
        field_values = []
        for field in self._meta.get_fields():
            field_values.append(str(getattr(self, field.name, '')))
        return ' '.join(field_values)

    class Meta:
        managed = False
        db_table = u'"MySchema"."FOLDER"'

Поля идентификатора числовые c автог. Я пытаюсь использовать модели Djano для установления sh отношения один ко многим между таблицами DRAWER и FOLDER с использованием fld1 . fld1 уникален в Drawer, а многие в Folder. Я сделал это в Java, но до сих пор кажется, что Django этого не допустит. Django, кажется, ожидает, что одна сторона должна быть ПК? Я понимаю, что Django имеет много к одному (вместо одного ко многим) и следовал документации ... но это не работает. Пожалуйста, сообщите, если есть способ сделать это в Django каркасе моделей.

Конечный результат, который я ищу в сервисе отдыха, - что-то вроде ниже, что я получаю из текущего JAVA Служба восстановления данных Hibernate:

{
"ID": 1234,
"FLD1": "xxxxxxxx",
"FLD2": "wertt",
"FLD3": "rtyuio",
folder:[
{
"ID": 5645,
"FLD1": "xxxxxxxx",
"FLD4": "zzzzzzz",
"FLD5": "cccccccc",
},
{
"ID": 5645,
"FLD1": "xxxxxxxx",
"FLD4": "rrrrrrr",
"FLD5": "cccccuuuuuuuuuuccc",
}
.
.
]

Я ценю любую помощь, которую вы можете предоставить.

...