[英]Django one to many Relationship Query
好吧,我開始學習Django,現在我在獲取一個QuerySet來填充表格時遇到了問題。
該表顯示有關編程器項目的信息。 每個項目都有n次迭代。
| id |名稱|開始|結束|成本|對象|描述|客戶|進度|狀態| 迭代|
在視圖中,我可以使用QuerySet來獲取前9列(從Project模型中獲取),如下所示:
projects = Project.objects.filter(responsible = request.user.id)
在第十列中,我必須顯示每個項目的“迭代次數”,而我正在嘗試這樣做:
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())
我不知道到底是怎么回事……有沒有更簡單的方法?
有點令人困惑...
我正在使用兩個模型:“項目”和“迭代”
型號:項目
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)
提前致謝!!!
(我翻譯了這個,如果翻譯中有錯誤,抱歉)
正確的方法是:
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)
希望能對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.