好吧,我正在开始学习Django,现在我遇到了一个问题,我可以使用QuerySet来填充表格。
该表显示了有关程序员项目的信息。每个项目都有n次迭代。
| ID |名称|开始|结束|成本| Objetive |简介|客户|进展|状态|迭代|
在View中,我可以使用如下的QuerySet获取前9列(来自Project模型):
projects = Project.objects.filter(responsible = request.user.id)
在第10列中,我必须显示每个项目的“迭代次数”,我正在尝试这个:
Proyect.objects.filter(responsible = request.user.id).annotate(Niterations= Iteration.objectsfilter(project_id= request.user.id).count())
嗯,它不起作用,我理解通过注释,参数将被添加到QuerySet中的每个对象......
我尝试的另一种方式是:
projects = Project.objects.filter(responsible = request.user.id)
for proy in projects:
proy.annotate(Iteration.objects.filter(project_id=proy.pk).count())
我不确切知道它不起作用......有更简单的方法吗?
这有点令人困惑......
我正在使用两个模型:“Project”和“Iteration”
型号:项目
from django.db import models
from usuarios.models import User
class Proyect(models.Model):
name = models.CharField(max_length=255)
start = models.DateField()
end = models.DateField(blank=True, null=True)
cost = models.FloatField(blank=True, null=True)
objetive = models.TextField(blank=True, null=True)
description = models.CharField(max_length=255, blank=True, null=True)
client = models.CharField(max_length=255, blank=True,null=True)
progress = models.FloatField(verbose_name=u'percentage of progress', default=0.00, editable=False)
responsible = models.ForeignKey(User, editable=False)
STATUS_CHOICES = (
('A','Atrasado'),
('N','Normal'),
('AP','Alta prioridad'),
)
status = models.CharField(max_length=2, choices=STATUS_CHOICES)
def __unicode__(self):
return self.name
型号:迭代
from django.db import models
from proyectos.models import Project
class Iteration(models.Model):
identifier = models.CharField(max_length=255)
start = models.DateField()
end = models.DateField()
progress = models.FloatField(default=0.0, editable=False)
project = models.ForeignKey(Project)
提前致谢!!!
(我翻译了这个,抱歉如果翻译有错误)
答案 0 :(得分:0)
正确的方法是:
Project.objects.filter(responsible=request.user.id).annotate(niterations=Count('iteration')
您可以看到查询以便更好地理解:
result = Project.objects.filter(responsible=request.user.id).annotate(niterations=Count('iteration')
print str(result.query)
我希望我能帮到你。