0

例如我有一个查询集说folder=Folder.objects.all()

如何在其中保存一些额外的变量说

for i in folder:
    i.fcount = 33

这样我就可以在模板中轻松使用它,例如:

{% for folder in folders %}{{ folder.fcount }}{% endfor %}

我在我的一个页面中使用这样的:

模型.py

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()

视图.py

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})

候选文件夹.html

 {% 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 }}
4

1 回答 1

1

您始终可以使用额外的方法,如下所示:

folder=Folder.objects.all().extra(select = {'fcount':33})

因此,对于文件夹查询集中的每个 f,您将拥有一些 fcount 属性。

它的工作方式类似于 SQL 别名。

如果您想根据您的模型使用其他一些数据,您必须使用注释(https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate),也许使用自定义聚合函数(https://docs.djangoproject.com/en/dev/topics/db/aggregation/)。

于 2013-07-11T06:27:38.813 回答