2015-10-14 45 views
0

当我使用尝试输出值在HTML通过Django的数据类型{{VARNAME}},我的查询返回的值是这样,的Python/Django的返回与变量值

(Decimal('567.45'),) 
25L 
u'test text' 

为什么数据类型用变量值重新调整?我注意到这并不总是发生。例如对于下面的查询发生此问题。

x = list(SegModel.objects.filter(**filterargs).order_by('id').values_list('var_type')) 
y = x[0] 

但是,如果我做了以下我没有这个问题,实际变量没有他们的数据类型返回。

obj = SegModel.objects.filter(**filterargs).order_by('id') 

for x in obj: 
     y = x.var_type 

有人可以解释为什么会发生这种情况吗?

感谢, 马尼什

回答

0

我一样做你说了.. BT了时间输出相同 我要做的就是:

s = list(School.objects.all().order_by('id').values_list('school_code')) 
     print "list(School.objects.filter(**filterargs).order_by('id').values_list('var_type')):",s 
     ex = School.objects.all().order_by('id') 
     for i in ex: 
      print "i.var_type:",i.school_code 

因此其输出为:

list(School.objects.filter(**filterargs).order_by('id').values_list('var_type')): [(u'BFS',), (u'APS',)] 
i.var_type: BFS 
i.var_type: APS 

所以这有什么奇怪的......可能你犯了错误。

+0

你可以尝试在html中输出你的值吗?那是我面临这个问题的时候。我正在编辑这个细节的问题。 –

+0

okk ..我用这个我我的看法: s = list(Student_Info.objects.all()。order_by('id')。values_list('student_First_Name')) context_dict = {'bold_message':“Hello World” , '列表':S} 在teplate: {%为在列表%STU} \t \t \t \t \t​​{{STU}} \t \t \t \t {%ENDFOR%} BT仍然给出正确的答案。即只有价值。 –

+0

这很奇怪。也许我们的差异来自其他地方。 –

0

我只注意到这一点,

>>> x=u'gtre' 
>>> x 
u'gtre' 
>>> y='gtre' 
>>> y 
'gtre' 
>>> x==y 
True 
>>> type(x) 
<type 'unicode'> 
>>> type(y) 
<type 'str'> 
>>> str(x) 
'gtre' 

所以很明显变量类型返回只有某些类型。在这种情况下,unicode,而str返回没有类型的普通值。

因此,如果将来我得到这个问题,我知道如何解决这个问题。

>>> str(x) 
'gtre' 
>>> x 
u'gtre' 

但谁能告诉我,而在Django/Python的是什么决定了这些类型进行查询(海峡或Unicode的如。)?有没有默认?