2015-11-04 86 views
0

我試圖在巢上獲得反向關係。django rest框架 - 如何在嵌套時表示反向關係?

這裏是我的models.py(相關型號)

class Tblusergroups(models.Model): 
    groupid = models.AutoField(db_column='groupId', primary_key=True) # Field name made lowercase. 
    shortname = models.CharField(db_column='shortName', max_length=255) # Field name made lowercase. 
    groupname = models.CharField(db_column='groupName', max_length=255, blank=True) # Field name made lowercase. 
    departmentname = models.CharField(db_column='departmentName', max_length=255, blank=True) # Field name made lowercase. 
    subdepartmentname = models.CharField(db_column='subDepartmentName', max_length=255, blank=True) # Field name made lowercase. 
    subdepartmentshortname = models.CharField(db_column='subDepartmentShortName', max_length=255, blank=True) # Field name made lowercase. 
    divisionname = models.CharField(db_column='divisionName', max_length=255, blank=True) # Field name made lowercase. 
    divisionshortname = models.CharField(db_column='divisionShortName', max_length=255, blank=True) # Field name made lowercase. 
    subdivisionname = models.CharField(db_column='subDivisionName', max_length=255, blank=True) # Field name made lowercase. 
    seniormanager = models.CharField(db_column='seniorManager', max_length=255, blank=True) # Field name made lowercase. 
    manager = models.CharField(max_length=255, blank=True) 
    supportcontactemailaddress = models.CharField(db_column='supportContactEmailAddress', max_length=255, blank=True) # Field name made lowercase. 
    comments = models.TextField(blank=True) 
    isactive = models.NullBooleanField(db_column='isActive') # Field name made lowercase. 
    recordownerid = models.IntegerField(db_column='recordOwnerId', blank=True, null=True) # Field name made lowercase. 
    lastmodifieddate = models.DateTimeField(db_column='lastModifiedDate', blank=True, null=True) # Field name made lowercase. 
    lastmodifiedby = models.CharField(db_column='lastModifiedBy', max_length=255, blank=True) # Field name made lowercase. 
# upsize_ts = models.TextField(blank=True) # This field type is a guess. 
    class Meta: 
     managed = False 
     db_table = 'tblUserGroups' 

class Tblbmcgroups(models.Model): 
    bmcid = models.AutoField(db_column='bmcId', primary_key=True) 
    groupid = models.ForeignKey(Tblusergroups, db_column='groupId', related_name='bmc_code', to_field='groupid') 
    bmccode = models.CharField(db_column='bmcCode', max_length=255) 

    class Meta: 
     managed = False 
     db_table = 'tblBmcGroups' 

class Tblservers(models.Model): 
    serverid = models.IntegerField(db_column='serverId', primary_key=True) # Field name made lowercase. 
    servername = models.CharField(db_column='serverName', max_length=255) # Field name made lowercase. 
    environmentid = models.ForeignKey(Tbldomaincodes, db_column='environmentId', related_name='+', to_field='id') # Field name made lowercase. 
    isvirtual = models.NullBooleanField(db_column='isVirtual') # Field name made lowercase. 
    locationid = models.ForeignKey(Tbldomaincodes, db_column='locationId', related_name='+', to_field='id') # Field name made lowercase. 
    managedbyid = models.ForeignKey(Tbldomaincodes, db_column='managedById', related_name='+', to_field='id') # Field name made lowercase. 
    operatingsystem = models.CharField(db_column='operatingSystem', max_length=255, blank=True) # Field name made lowercase. 
    model = models.CharField(max_length=255, blank=True) 
    assettag = models.CharField(db_column='assetTag', max_length=255, blank=True) # Field name made lowercase. 
    inceptiondate = models.DateTimeField(db_column='inceptionDate', blank=True, null=True) # Field name made lowercase. 
    comments = models.TextField(blank=True) 
    assetstatusid = models.ForeignKey(Tbldomaincodes, db_column='assetStatusId', related_name='+', to_field='id') # Field name made lowercase. 
    recordownerid = models.ForeignKey(Tblusergroups, db_column='recordOwnerId') # Field name made lowercase. 
    lastmodifieddate = models.DateTimeField(db_column='lastModifiedDate', blank=True, null=True) # Field name made lowercase. 
    lastmodifiedby = models.CharField(db_column='lastModifiedBy', max_length=255, blank=True) # Field name made lowercase. 
# upsize_ts = models.TextField(blank=True) # This field type is a guess. 
    class Meta: 
     managed = False 
     db_table = 'tblServers' 

我在做一個非常簡單的serializers.py

class TblusergroupsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Tblusergroups 
     fields = ('groupid', 'shortname', 'groupname', 'departmentname', 'subdepartmentname', 'subdepartmentshortname', 
        'divisionname', 'divisionshortname', 'seniormanager', 'manager', 'supportcontactemailaddress', 
        'comments', 'isactive', 'recordownerid', 'lastmodifieddate', 'lastmodifiedby', 'bmccode') 

class TblserversSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Tblservers 
     fields = ('serverid', 'servername', 'isvirtual', 'locationid', 'managedbyid', 'operatingsystem', 'model', 
        'assettag', 'inceptiondate', 'comments', 'assetstatusid', 'recordownerid', 'lastmodifieddate', 
        'lastmodifiedby') 
     depth = 2 

class TblapplicationsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Tblapplications 
     depth = 1 

如果我只使用了TblusergroupsSerializer我可以看到的反向關係在bmccode問題是當我試圖讓它代表當使用TblserversSerializer

我猜測序列化它可能是asier只需要一個def get_bmccode

回答

0

您應該明確設置嵌套序列化程序。

例如(來自http://www.django-rest-framework.org/api-guide/relations/#nested-relationships截取):

class TrackSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Track 
     fields = ('order', 'title', 'duration') 

class AlbumSerializer(serializers.ModelSerializer): 
    tracks = TrackSerializer(many=True, read_only=True) 

    class Meta: 
     model = Album 
     fields = ('album_name', 'artist', 'tracks')