我有一个磁盘模型,它有三个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
答案 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
},