2014-02-16 130 views
0

我被Django模型查詢卡住了。django:獲取相關對象的排序列表(不同型號)

我的模型:

class ProjectCategory(models.Model): 
    name=models.CharField(_('Categoryname'), max_length=250) 

class Reference(models.Model): 
    title=models.CharField(_('Title'),max_length=250) 
    category=models.ForeignKey(ProjectCategory) 
    start_date=models.DateTimeField(_('Start date'), 
           help_text= _(u'Starting date of the project'), 
           ) 
    end_date=models.DateTimeField(_('End date'), 
           help_text= _(u'Project end date'),) 

class Project(Reference): 
    size=models.CharField(_('size'),max_length=250) 

我需要所有類別(按名稱orderd)和它的所有引用和項目的列表(由起始日期orderd

Category1 
-Reference 1 1.1.2012 
-Project 1 1.1.2013 
-Reference 2 1.1.2014 

Category2 
-Project 2 1.1.2000 
-Reference 3 1.1.2001 

如何。建立查詢和模板?

回答

1

該查詢是直截了當的:

categories = ProjectCategory.objects.select_related().all().order_by("name") 

在模板中,您只需因爲兩者ReferenceProject應該可以在那裏找到通過category_set進行迭代。 A dictsort應照顧在模板內訂購:

{% for c in categories %} 
    <h2> {{ c }} </h2> 
    <ul> 
    {% for r in c.category_set.all|dictsort:"start_date" %} 
    <li> {{ r }} </li> 
    {% endfor %} 
    <ul> 
{% endfor %} 
0

感謝您的快速回答,但它不工作。

c.category_set.all|dictsort:"start_date" 

沒有提供任何元素。

如果我使用c.reference_set.all|dictsort:"start_date"而不是我得到的所有元素(包括項目),如果我使用c.project_set.all|dictsort:"start_date"我什麼也得不到。

對我來說,這看起來像是繼承對象查詢中的一個錯誤。此外,我想知道你爲什麼使用category_set。我以前沒有見過這個,甚至沒有見過這個文檔。