django模型ForeignKey返回ID而非__unicode__中指定的值
在使用Django模型时,我有一个外键的设置,代码如下:
class Types_of_Expenditures(models.Model):
Expenditure_owner = models.CharField(default="None",max_length=50)
Expenditure_Type = models.CharField(default="Miscellaneous",max_length=50)
Expenditure_Type_Description = models.CharField(max_length=200)
def __unicode__(self):
return self.Expenditure_Type
class Expenditure(models.Model):
exp_owner= models.CharField(default='None',max_length=50)
exp_date = models.DateTimeField("Expenditure_Date")
description = models.CharField(max_length=1000)
amount = models.FloatField(default=0)
currency = models.CharField(max_length=15,default="MYR",editable=True)
exp_pocket = models.ForeignKey(Pockets, null=True, blank=True)
exp_type = models.ForeignKey(Types_of_Expenditures)
class Meta:
unique_together = ('exp_date', 'description',)
def __unicode__(self):
return self.description
现在,当我在“支出类型”中保存数据时,我的操作是:
Types_of_Expenditures.objects.get_or_create(Expenditure_owner='a',Expenditure_Type_Description="Default one")
在数据库中,数据是这样的:
id Expenditure_owner Expenditure_Type Expenditure_type_description
1 a Miscellaneous default one
但是,当我添加任何内容到“支出”时,保存的数据在exp_type中显示为1,但它应该是“杂项”,因为在unicode函数中,我返回的是支出类型。
这是我使用formset来保存“支出”模型数据的方法:
ExpFormSet = modelformset_factory(Expenditure,extra=10,max_num=10,
fields=('exp_date', 'description','exp_type','amount','currency','exp_pocket'),
can_delete=False,form=ExpenditureForm)
if request.method == 'POST':
formset = ExpFormSet(request.POST,queryset=Expenditure.objects.filter(exp_owner=request.user))
if formset.is_valid():
print "printing formset",formset
formset.save(commit=True)
cd = form.cleaned_data
expenditureType = cd.get('exp_type')
print "Expenditure Type entered is ",expenditureType
return index(request)
在索引视图中,我做了以下操作:
Expenditure_list = Expenditure.objects.order_by('-exp_date').filter(exp_owner=request.user)
print "Expenditure List is : ", Expenditure_list.values_list()
现在,这个支出视图的输出,Expenditure_list.values_list()的值是(请看最后一个值,它是1,即exp_type的值):
Expenditure List is : [(3, u'a', datetime.datetime(2014, 9, 12, 15, 32, 10), u'test', 1.0, u'MYR', u'pocket', 1)]
我期望的结果是:
Expenditure List is : [(3, u'a', datetime.datetime(2014, 9, 12, 15, 32, 10), u'test', 1.0, u'MYR', u'pocket', u'Miscellaneous')]
有没有人能帮我看看这里可能是什么问题?
我觉得这个问题可能有点不对,可能它只会保存外键,也就是ID,而要获取支出类型,我需要通过Types_of_Expenditure.objects.get(pk="列表中的键")来检索。
但我不确定有没有其他的办法?
1 个回答
1
我觉得我明白你的问题了。你似乎期待 values_list
返回一个相关模型的 __unicode__
值,但其实没有理由认为它会这样做:就像名字所暗示的,它只返回值,而外键字段的值其实就是ID。
如果你想的话,可以给 values_list
提供一个字段名的列表,这样就可以在这里遍历关系了:
Expenditure.objects.values_list('description', 'amount', 'exp_type__ Expenditure_Type')