以書籍和作者模型為例,書籍有一個或多個作者。具有cover_type 的書籍和以國家為起源的作者。
我怎樣才能列出所有精裝書和作者,如果他們來自法國?
Books.objects.filter(cover_type='hard', authors__origin='france')
此查詢不檢索有精裝書但沒有法國作者的書籍。
我想要所有精裝書,這是謂詞#1。如果他們的作者來自法國,我希望對他們進行注釋,否則作者欄位可能為空或“無”。例如:`
Bookname, covertype, origin
The Trial, hardcover, none
Madam Bovary, hardcover, France
`
嘗試了很多選項,注釋、Q、值、子查詢、何時、大小寫、存在,但可以提出解決方案。
使用 sql 這很容易:
select * from books b left join authors a on a.bookref=b.id and a.origin=france where b.covertype='hard'
(我的模型不是書籍和作者,我選擇它們是因為它們是 django-docs 的示例模型。我的模型是 building 和 buildingtype,我想要 building.id=454523 和 buildigtype,其中 buildingtype 處于活動狀態,buildingtype 可能為 null建筑物或只有 1 個主動和零個或多個被動)
uj5u.com熱心網友回復:
您應該在 Auther 表中使用 Book id。那么您的查詢將是這樣的: Author.objects.filter(origin="france",book__cover_type="hard")
uj5u.com熱心網友回復:
我想我用子查詢、outerref、exists、case、when、charfield 解決了它……對于一個簡單的 sql 來說,匯入太多了。`
author = Authors.objects.filter(bookref=OuterRef('id'), origin='France').values('origin')
books = Books.objects.filter(cover_type='hard').annotate(author=Case(When(Exists(author), then=Subquery(author)), default='none', output_field=CharField())).distinct().values('name','cover_type','author')
`
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/378552.html
上一篇:LDAP系結失敗:LDAPOperationsErrorResult-1-OperationsError-無-000004DC:LdapErr:DSID-0C090A5C,
