在序列化器中使用另一个模型字段的DRF

时间:2019-08-07 18:58:28

标签: django django-models django-rest-framework

我正在使用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并将其序列化,并将其他字段替换为snpid的{​​{1}}并环顾四周我找到了这个解决方案

SnpsFunctionalElement

但是说class SnpsFunctionalelementSerializer(serializers.ModelSerializer): rsid = serializers.SerializerMethodField() def get_rsid(self, obj): return obj.Snps.rsid .... 无效,我不知道该怎么办

1 个答案:

答案 0 :(得分:0)

如果扩展ModelSerializer类,则不会有任何麻烦。只需指出要使用的型号和哪些字段即可。

class SnpsFunctionalelementSerializer(serializers.ModelSerializer):

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