gpt4 book ai didi

python - 如何连接序列化器(DjangoRestFramework)中的字段?

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:05 24 4
gpt4 key购买 nike

我拥有对 SQL 旧版数据库的读取访问权限。假设在数据库中我有两个表:Treatment 和 TreatmentType。在治疗表中,我有病人ID (int)、日期(文本)、治疗类型(int)。在TreatmentType 表中,我有code(int) 和meaning (Text)Treatment.treatmentType 是用于在TreatmentType 表中查找含义的代码。

在第一次迁移期间,我使用了一个内置方法:django 中的inspectdb,我得到了这样的结果:

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',
]

效果很好。但我对此有点怀疑。是否有其他替代方法可以正确地完成(以更有效的方式)?

谢谢!!

最佳答案

正如一些评论中所指出的,inspectdb 只是一个猜测。特别是它无法找到Treatment 和TreatmentType 之间的外键,因此您需要自己进行更改。

更新治疗上的treatmenttype字段,如下所示:

treatmenttype = models.ForeignKey('TreatmentType', db_column='TREATTYPE', to_field='code', blank=True, null=True)

现在,除了能够在您自己的代码中自动跟踪该外键 - 例如通过 my_treatment.treatmenttype.meaning - 您还可以使用 SlugRelatedField在序列化器中自动获取含义值:

class TreatmentModelSerializer(serializers.ModelSerializer):
treatmenttype = serializers.SlugRelatedField(read_only=True, slug_field='meaning'

还有一些其他字段类型需要更新; index 字段可能应该是 AutoFields,而 date 应该是 DateField。

关于python - 如何连接序列化器(DjangoRestFramework)中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com