У меня есть доступ для чтения к SQL-устаревшей БД. Предположим, что в БД есть две таблицы: Лечение и лечение Тип. В таблице лечения у меня есть patientID (int), date (text), treatmentType (int)
. В таблице TreatmentType у меня есть code(int) and meaning (Text)
. Treatment.treatmentType - это код для поиска , что означает в таблице TreatmentType.Как подключить поля в Сериализаторе (DjangoRestFramework)?
Во время первой миграции, я использую встроенный метод: inspectdb
из django
, и я получаю что-то вроде этого:
class TreatmentType(models.Model):
index = models.TextField(primary_key=True)
code = models.IntegerField(db_column='Code', blank=True, null=True) # Field name made lowercase.
meaning = models.TextField(db_column='Meaning', blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'TreatmentType'
class Treatment(models.Model):
index = models.TextField(primary_key=True)
patient = models.IntegerField(db_column='PATIENT', blank=True, null=True) # Field name made lowercase.
date = models.TextField(db_column='DATE', blank=True, null=True) # Field name made lowercase. This field type is a guess.
treatmenttype = models.IntegerField(db_column='TREATTYPE', blank=True, null=True) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Treatment'
Из модели, я хочу иметь REST API для получения списка лечения дополнительной колонкой TreatmentMeaning. Я использую DjangoRestFramework создать сериализаторы для меня:
class TreatmentModelSerializer(serializers.ModelSerializer):
meaning = serializers.SerializerMethodField('get_meaning')
def get_meaning(self, instance):
meaning = TreatmentType.objects.get(code=instance.treatmenttype).meaning
return meaning
class Meta:
model = Treatment
fields = [
'patient',
'date',
'meaning',
]
Он отлично работает. но я немного скептически отношусь к этому. Есть ли другие альтернативные способы сделать это правильно (более эффективным способом)?
Спасибо!
К сожалению, я не могу сделать что-то подобное. Обе они не связаны таблицей в БД ... Означает ли это, что я могу только присоединиться к ним вручную @ Даниэль Роземан? –
Я не знаю, что вы имеете в виду. Если 'TREATTYPE' является целым числом, представляющим соответствующую строку в таблице TreatmentType, это внешний ключ. –
Ahh, как я могу указать, что соответствующее поле не является 'index', а поле' code'? –