对不起,我的英语水平和我的模特都不好。
现在,我被困在模板中显示价值。
purchaseinfo / models.py
class Status(Models.model):
type = models.CharField(max_length=30)
class PurchaseInfo(models.Model):
purchase_id = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
purchase_name = models.CharField(max_length=30)
.....
type = models.ForeignKey(Status,on_delete=models.PROTECT)
customlogin / views.py
def purchaseHistory(request):
history = PurchaseInfo.objects.filter(purchase_id=request.user).values()
return render(request,'customlogin/purchaseHistory.html',{'history':history})
customlogin / purchaseHistory.html
{% for i in history %}
<tr>
<td>{{i.purchase_name}}</td>
<td>{{i.product_price}}</td>
......
<td>{{i.type}}</td> <---- Here, Only this cannot show
</tr>
{% endfor %}
在模板中,其他功能运行良好。但是 {{i.type}} 无法显示。
类别状态的值:存款之前,付款确认等。
存款前为基础价值。所以我想在模板中显示基本价值。
如何在模板中显示{{i.type}}? T.T
答案 0 :(得分:2)
该错误是由于以下事实造成的:您在末尾用QuerySet
调用.values()
,因此将获得QuerySet
的字典。 无法解析外键,但是您可以获取相应的主键。
最好仅在真正需要时使用.values()
:当您要获取列的子集时。通常,最好获取模型对象,因为这样,您附加到对象的“行为”将保持不变。
def purchaseHistory(request):
# no .values()
history = PurchaseInfo.objects.filter(purchase_id=request.user)
return render(request,'customlogin/purchaseHistory.html',{'history':history})
现在,我们已经创建了QuerySet
个PurchaseInfo
对象,在模板中,i.type
将是Status
对象。这将通过调用Status
对象来渲染str(..)
对象。默认情况下,其外观类似于Status object (123)
和123
不过,您也可以访问模板中此Status
对象的字段:
{% for i in history %}
<tr>
<td>{{ i.purchase_name }}</td>
<td>{{ i.product_price }}</td>
......
<td>{{ i.type.type }}</td>
</tr>
{% endfor %}
鉴于该字段的名称为type
,因此,如果该字段包含值'Before deposit'
,它将呈现该字符串。
由于我们在这里将为查询集中的每个 Status
对象获取相关的PurchaseInfo
对象,因此最好在一个查询中获取它,例如:
def purchaseHistory(request):
# no .values()
history = PurchaseInfo.objects.filter(purchase_id=request.user).select_related('type')
return render(request,'customlogin/purchaseHistory.html',{'history':history})
您可能想覆盖__str__
类中的Status
方法,以使这是呈现状态的“标准”方式,例如:
class Status(Models.model):
type = models.CharField(max_length=30)
def __str__(self):
return self.type
在这种情况下,模板中的{{ i.type }}
就足够了。