簡體   English   中英

Django一對多關系查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM