Django在返回时将反向外键的值添加为字段

时间:2017-05-30 06:22:01

标签: django django-annotate

我有两个型号。一个是任务模型,另一个是奖励模型。

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

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

现在我想返回Task的查询集以及其中的奖励字段。我试过这个查询。 search_res = Task.objects.annotate(reward ='reward')。

我收到此错误:注释“奖励”与模型上的字段冲突。 请告诉我们如何解决这个问题。我想在每个任务对象中获得一个场奖励。

1 个答案:

答案 0 :(得分:0)

要使用实际模型达到目标,我只需将关系与任务一起使用。

假设您有一个任务(或任务的查询集):

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

for t in Task.objects.all():

你可以得到这样的奖励:

t.reward_set.first()

如果没有与该任务实际相关的奖励,请处理异常。

这会导致对大型数据集进行大量查询,因此您可以根据需要使用 select_related prefetch_related 优化对数据库的请求。看看Django的文档。