我有安裝像這樣(變簡單)處理相關模型在Django用於Django的活塞
class Author(models.Model)
name = models.CharField(max_length=100)
...
class Document(models.Model):
title = models.CharField(max_length=200)
content - models.TextField()
author = models.ForeignKey("Author", related_name="documents")
date_published = models.DateTimeField()
categories = models.ManyToManyField("Category")
class Category(models.Model):
name = models.CharField(max_length=100)
我拉在作者記錄,但我只希望在相關文件記錄拉每個作者都符合特定標準 - 比如date_published和category。
我知道簡單的方法來做到這將是記錄與使用Author.objects.values()
詞典列表拉,通過每個記錄和運行循環:
author['documents']=Document.objects.filter(categories__in=[category_list], date_published__year=year)`
然而,這正在爲django-產生活塞,如果你返回一個QuerySet對象,它似乎是最快樂的(特別是如果你正在定義你自己的領域!)。
部分原因可能是因爲我對基本django活塞代碼進行了更改。基本上,這裏的current version of the code覆蓋了fields
的值。我更改了這段代碼,以便根據請求更改處理程序的fields
值(因此,如果請求是針對特定資源的,我可以提供更多詳細信息)。
所以我想我的問題有三個方面:
- 有沒有一種方法來過濾或以某種方式限制記錄的子記錄(即過濾
documents
每個author.documents
) - 如果沒有,是什麼這樣做的功能還可以與Django-piston一起使用嗎?
- 是否有一些更容易,更好的方法來做我想做的事情(如果沒有給出id,顯示所有作者沒有他們的文檔,但顯示子記錄,如果過濾到只有一個作者)?
澄清
好了,僅僅是明確的,這裏是我想要的僞代碼:
def perhaps_impossible_view(request, categories=None, year=None):
authors = Author.objects.all()
authors.something_magical_happens_to_documents(category__in=[categories], date_published__year=year)
return render_to_response('blar.html', locals(), RequestContext(request))
所以,如果我是把它放在一個模板,這會工作沒有任何修改:
{% for a in authors %}
{% for d in authors.documents.all %}
{{ d.title }} is almost certainly in one of these categories: {{ categories }} and was absolutely published in {{ year }}. If not, .something_magical_happens_to_documents didn't work.
{% endfor %}
{% endfor %}
something_magical_happens_to_documents
必須運行並且實際改變每個作者記錄的documents
的內容。這似乎應該是可能的,但也許它不是?
這隻過濾作者的記錄,這是不想要的效果。 John,Sally和Maria各寫了100個文檔,John有10個匹配文檔,Sally 8,Maria 0.隨着你的查詢,只有John和Sally會出現,並且對於每個'author.documents.count()'仍然是100.我想讓John,Sally和Maria出現,'author.documents.count()'應該分別爲10,8和0。我懷疑是否存在一種黑客,如果您願意惹惱QuerySet對象的內部組件,那麼您可以設置此項。 – 2010-09-20 15:56:55
@Jordan,對於沒有缺失匹配的作者是真的(它是一個過濾器,所以它們當然會被刪除),但文檔計數不起作用,因爲您沒有使用查詢集來查找文檔計數。由於評論太長且需要代碼,我編輯了答案。 – laurent 2010-09-21 04:17:00
@Jordan,'author.documents.count()'將始終返回100,除非您修改數據,因爲它是一個新的查詢而沒有過濾 – laurent 2010-09-21 13:25:24