例如我有一个查询集说folder=Folder.objects.all()
。
如何在其中保存一些额外的变量呢
for i in folder:
i.fcount = 33
这样我就可以轻松地在模板中使用它了:
{% for folder in folders %}{{ folder.fcount }}{% endfor %}
我在我的一个页面中使用了这样的内容:
class Folder(models.Model):
employer=models.ForeignKey(Employer)
name=models.CharField(max_length=100)
lastupdate= models.DateTimeField(auto_now=True)
class SavedCandidateManager(models.Manager):
def itemcount(self,fd):
return self.filter(folder=fd).count()
class SavedCandidate(models.Model):
folder=models.ForeignKey(Folder)
candidate=models.ForeignKey(Jobseeker)
created=models.DateTimeField(auto_now_add = True)
objects=SavedCandidateManager()
def folder(request):
folder=Folder.objects.filter(employer=request.user.employer)
for i in folder:
i.fcount=SavedCandidate.objects.itemcount(i)
return render(request,'employer/pages/candidatefolder.html', {'folders':folder})
{% for folder in folders %}
<tr>
<td>
<a href="/Folder/{{ folder.id }}/" >{{ folder.name }}</a>
</td>
<td>{{ folder.fcount }}</td>
<td>{{ folder.lastupdate }}</td>
</tr>
{% endfor %}
这非常有用,因为我可以在forloop外观中轻松地在模板中使用它:
{{ folder.fcount }}
答案 0 :(得分:1)
您总是可以使用额外的方法,如下所示:
folder=Folder.objects.all().extra(select = {'fcount':33})
因此,对于文件夹查询集中的每个f,您将拥有一些fcount属性。
它的工作方式类似于SQL Alias。
如果您想根据您的模型使用其他一些数据,您必须使用注释(https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate),可能使用自定义聚合函数(https://docs.djangoproject.com/en/dev/topics/db/aggregation/)。