2017-05-30 83 views
0

我有兩種模式。一個是任務模型,另一個是獎勵模型。Django在返回時添加反向外鍵值作爲字段

class Task(models.Model): 
    assigned_by = models.CharField(max_length=100) 

class Reward(models.Model): 
    task = model.ForeignKey(Task) 

現在我想返回任務的查詢集以及其中的獎勵字段。我試過這個查詢。 search_res = Task.objects.annotate(獎勵='獎勵')。

我得到這個錯誤:註解'獎勵'與模型上的字段衝突。 請告訴如何解決這個問題。我想在每個任務對象中獲得一個領域獎勵。

+0

嗨。我不清楚你想完成什麼。獎勵有一個ForeignKey任務,所以任務可以有多個獎勵。也就是說,如果沒有註釋,例如,您將能夠通過task.reward_set.all()訪問與任務相關的所有獎勵對象。 – steppo

+0

數據庫中的任務只有一個獎勵。我想在返回查詢集的同時將字段獎勵添加到每個任務對象。 – gopiariv

+0

我想你想列舉任務和他們各自的獎勵,你不知道如何做到這一點?我對嗎? – Sagar

回答

0

爲了達到您的目標與實際模型,我會簡單地使用關係與任務。

比方說,你有一個任務(或任務的查詢集):

t = Task.objects.get(pk=1) 

for t in Task.objects.all(): 

你可以得到獎勵是這樣的:

t.reward_set.first() 

保重如果沒有與該任務實際相關的獎勵,則例外。

招致在大型數據集的查詢相當的量,所以你可以用select_related優化朝DB請求根據您的需要prefetch_related。看看Django的文檔。