Python 如何将外键id转换为值-Django

Python 如何将外键id转换为值-Django,python,ajax,json,django,http,Python,Ajax,Json,Django,Http,我在Django中的Models.py文件中定义了以下Models: class HadoopDistributor(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Cluster(models.Model): size = models.IntegerField(default=0) name = mod

我在Django中的
Models.py
文件中定义了以下
Models

class HadoopDistributor(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
       return self.name

class Cluster(models.Model):
   size = models.IntegerField(default=0)
   name = models.CharField(max_length=300, default="")
   hadoop_dist = models.ForeignKey(HadoopDistributor)
   hadoop_version = models.ForeignKey(HadoopVersion)
   dgsecure = models.ForeignKey(DgSecure)
   user = models.ForeignKey(User)
   datafiles = models.ManyToManyField(Data)
   created = models.DateTimeField(default=None)
   deleted = models.DateTimeField(default=None, blank=True)

   FAILED = 'FL'
   RUNNING = 'RN'
   SUCCESS = 'SC'
   DESTROY = 'DS'

   STATUS = (
       (FAILED, 'FAILED'),
       (RUNNING, 'RUNNING'),
       (SUCCESS, 'SUCCESS'),
       (DESTROY, 'DESTROY')
   )

   status = models.CharField(max_length=2,
                             choices=STATUS,
                             default=FAILED)

   def __str__(self):
      return self.name

   def __unicode__(self):
       pass

   class Meta:
      ordering = ('hadoop_version', ) 
所以集群有一个
hadoop分发服务器
,就像
Cloudera
。然后,在我的
views.py
上,我查询由特定用户创建的所有集群的列表:

def get_cluster_list(request):
    clusters = Cluster.objects.filter(user=request.user)
    cluster_obj = serializers.serialize('json',
                                       clusters,
                                       indent=2,
                                       use_natural_foreign_keys=True,
                                       use_natural_primary_keys=True)
    return HttpResponse(cluster_obj, content_type="application/json")
现在,当我执行HTTP
GET时:

{
  "fields": {
    "status": "FL",
    "hadoop_dist": 1,
    "dgsecure": 1,
    "name": "",
    "created": "2014-10-22T22:58:41Z",
    "deleted": "2014-10-22T22:58:41Z",
    "user": [
      "philippe"
    ],
    "datafiles": [],
    "hadoop_version": 2,
    "size": 2
  },
但我希望其价值是:

{
  "fields": {
    "status": "FL",
    "hadoop_dist": "Cloudera",
    "dgsecure": 1,
    "name": "",
    "created": "2014-10-22T22:58:41Z",
    "deleted": "2014-10-22T22:58:41Z",
    "user": [
      "philippe"
    ],
    "datafiles": [],
    "hadoop_version": 2,
    "size": 2
  },

实现这一点的简单方法是用外键的名称替换所有元素,然后返回,但我想知道是否有一种简单的方法来实现这一点。我读了一些关于
Django
模型中的
\uuuuunicode\uuuu
的内容,但我不明白这是如何帮助我实现我想要的。有什么帮助吗?

答案是在
HadoopDistributor

所以

\uuuuuuunicode\uuuuu
\uuuuu str\uuuuu
的旁注中,您应该真正实现:

 def __unicode__(self):
   return self.name

 def __str__(self):
   return unicode(self).encode('utf-8')

注意:您应该始终从
natural\u key
返回一个natural key元组,因此说
return(self.name,)
更为正确,尽管这会给出与您想要的稍有不同的输出。
 def __unicode__(self):
   return self.name

 def __str__(self):
   return unicode(self).encode('utf-8')