首页 > 解决方案 > DRF 在序列化程序中使用另一个模型字段

问题描述

我正在使用 DRf 迈出第一步,但我遇到了这个问题。假设我有一个这样的模型

class Snps(models.Model):
   snpid = models.AutoField(db_column='SNPID', primary_key=True)
   rsid = models.CharField(unique=True, max_length=20)
   chrom = models.CharField(max_length=5)
   pos = models.PositiveIntegerField()

class Meta:
    managed = False
    db_table = 'SNPs'

def __str__(self):
    return str(self.snpid)

class SnpsFunctionalelement(models.Model):
    snpid = models.ForeignKey(Snps, models.DO_NOTHING, db_column='SNPID', primary_key=True) 
    elementid = models.ForeignKey(Functionalelement, models.DO_NOTHING, db_column='ElementID')  
    celllineid = models.ForeignKey(Celllines, models.DO_NOTHING, db_column='CELLLINEID') 
    filetype = models.CharField(db_column='fileType', max_length=10)

    class Meta:
        managed = False
        db_table = 'SNPs_FunctionalElement'
        unique_together = (('snpid', 'elementid', 'celllineid', 'filetype'),)

    def __str__(self):
        return str(str(self.snpid) + str(self.elementid) + str(self.celllineid) + str(self.filetype))

现在在serializers.py我想从中获取字段rsid并将Snps其与其他字段替换并对其进行序列化snpidSnpsFunctionalElement环顾四周我找到了这个解决方案

class SnpsFunctionalelementSerializer(serializers.ModelSerializer):

rsid = serializers.SerializerMethodField()

def get_rsid(self, obj):
    return obj.Snps.rsid
....

但是这样说是行不通的,'SnpsFunctionalelement' object has no attribute 'Snps'我不明白该怎么做

标签: djangodjango-modelsdjango-rest-framework

解决方案


如果ModelSerializer课程延长,则无需任何麻烦。只需指明要使用的模型和字段。

class SnpsFunctionalelementSerializer(serializers.ModelSerializer):

    class Meta:
        model = Snps
        fields = ('rsid')

推荐阅读