【问题标题】:Django adding the values of reverse foreign key as field while returningDjango在返回时添加反向外键的值作为字段
【发布时间】:2017-05-30 06:22:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗨。我不太清楚你想要完成什么。 Reward 对 Task 有一个 ForeignKey,因此一个任务可能有多个奖励。也就是说,如果没有注释,您将能够通过 task.reward_set.all() 访问与任务相关的所有奖励对象。
  • 数据库中的任务只有一个奖励。我想在返回查询集时为每个任务对象添加字段奖励。
  • 我想您想列出任务及其各自的奖励,但您不知道该怎么做?我说的对吗?
  • 是的。我现在明白了。我必须在定义外键时添加一个related_name 字段。

标签: django django-annotate


【解决方案1】:

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

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

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

for t in Task.objects.all():

你可以获得这样的奖励:

t.reward_set.first()

如果没有与任务实际相关的奖励,请注意异常。

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

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2011-08-08
    • 2018-10-25
    • 1970-01-01
    • 2012-08-26
    • 2019-12-30
    • 2023-03-31
    • 2019-08-10
    • 2011-09-23
    相关资源
    最近更新 更多