我試圖給QuerySet的元素添加一些額外的屬性,所以我可以在模板中使用額外的信息,而不是多次擊中數據庫。讓我通過例子來說明,假設我們有作者的ForeignKeys書籍。有沒有辦法用額外的屬性來擴充django QuerySets?
>>> books = Book.objects.filter(author__id=1)
>>> for book in books:
... book.price = 2 # "price" is not defined in the Book model
>>> # Check I can get back the extra information (this works in templates too):
>>> books[0].price
2
>>> # but it's fragile: if I do the following:
>>> reversed = books.reverse()
>>> reversed[0].price
Traceback (most recent call last):
...
AttributeError: 'Book' object has no attribute 'price'
>>> # i.e., the extra field isn't preserved when the QuerySet is reversed.
所以添加屬性到查詢集的作品的元素,只要你不使用的東西像反向()。
我目前的解決方法是隻使用select_related()來從數據庫中再次獲取額外的信息,即使我已經在內存中。
有沒有更好的方法來做到這一點?
爲什麼在設置price屬性之前不要調用reverse函數? – MattoTodd
感謝MattoTodd,這就是我最終做的。 – toner