Python 如何将外键id转换为值-Django
我在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
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")
现在,当我执行HTTPGET时:
{
"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')