簡體   English   中英

如何在 Django 1.8 中連接表

[英]How to join tables in Django 1.8

我試圖訪問我的 django 模板中的連接數據,但沒有任何效果,非常感謝一點幫助。

Model1():
   project_code = Foreignkey(another table1)
   shot_code = charfield(primary_key = True)
   shot_name = charfield()
   sequence_name = Integerfield()

Model2():
   vendor_id = Foreignkey(another table2)
   shot_code = Foreignkey(Model1, on_delete= models.CASCADE)
   shot_rate = integerfield()
   shot_bid = integerfield()

我想顯示

Select * from Model1 a, Model2 b, where a.shot_code = b.shot_code 
and model1.project_code = "XXX"

要在模板中訪問的列是

1. Shot code
2. Shot name
3. Sequence name
4. Shot rate
5. Shot bid
6. Vendor id

我嘗試了以下方法

1. Using Select_related
    result = only values of model2 is displayed
    unable to access model1's data, 
    error = 'QuerySet' object has no attribute model1

您希望這會返回一個或多個實例嗎? 最好的方法仍然是select_related ,例如:

Model2.objects.filter(shot_code__project_code=<your value>).select_related("shot_code")

對於具有多個Model2實例的查詢集,或者如果您期望只有單個實例,則在末尾添加.get()

或者,您可以添加.values() ,而不是在兩個相關模型上進行操作,而是獲得類似 dict 的連接結果(但請注意,您將無法直接重用shot_code ,因為它會與您的外鍵名稱發生沖突):

Model2.objects.filter(shot_code__project_code=<your value>).annotate(
    sequence_name=F("shot_code__sequence_name"),
    shot_name=F("shot_code__shot_name"),
    real_shot_code=F("shot_code__shot_code")
).values(
    "sequence_name", "shot_name", "real_shot_code", "shot_rate", "shot_bid", "vendor_id"
)

和往常一樣,我建議不要將您的ForeignKey命名為vendor_id ,因為它會將真實 id 放在vendor_id_id ,並且命名會有點不清楚。

您可以使用 Model2 中設置的 Model1 查詢對象並獲取數據,請參見以下示例:

model1obj = Model1.objects.get(project_code = "XXX")
model2obj = Model2.objects.get(shot_code = model1obj)

# now access all the fields using model1obj  and model2obj

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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