如何在查询集中获取外部字段的名称?

时间:2017-11-17 12:54:36

标签: python django

我有一个磁盘模型,它有三个ForeignKey:

class Disk(models.Model):
    diskEssenceType = models.ForeignKey(to=DiskEssenceType, related_name='disks')  #  "SAS", "SSD" 等
    diskOsType = models.ForeignKey(to=DiskOSType, related_name='disks') # "系统盘" "数据盘" 两种选择
    hostType = models.ForeignKey(to=HostType, related_name='disks', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)  # 单价

    def __str__(self):
        return self.diskEssenceType.name + "-" + self.hostType.name
    def __unicode__(self):
        return self.diskEssenceType.name + "-" + self.hostType.name

我使用queryset:

qs = Disk.objects.filter(hostType=obj)

使用model_to_dict convert:

后,其查询集数据如下所示
{
   "price": 5.0,
   "diskOsType": 1,
   "hostType": 6,
   "diskEssenceType": 1,
   "id": 4
   },

但我希望获得diskEssenceType的名称,以及diskOsType的名称,而不是其ID,如何处理?

这就是我使用model_to_dict

的原因

<Disk: > is not JSON serializable

我的模型有 unicode 方法:

class DiskEssenceType(models.Model):
    name = models.CharField(unique=True, max_length=8, default="SSD")  # "SAS", "SSD" 等
    profile = models.CharField(max_length=256)

    def __str__(self):
        return self.name
    def __unicode__(self):
        return self.name

1 个答案:

答案 0 :(得分:0)

您需要在模型中定义:

def __unicode__(self):
        return unicode(self.<you return>)

然后您需要在模型hostType中定义:

class hostType(models.Model):
     name = models.CharField(max_length=10, blank=True, null=True, default="myname")

     def __unicode__(self):
          return unicode(self.name)

然后当你创建queryset时,你得到了这个:

qs = Disk.objects.filter(hostType=obj)


{
   "price": 5.0,
   "diskOsType": 1,
   "hostType": "my name",
   "diskEssenceType": 1,
   "id": 4
   },