【问题标题】:How to get data from Foreign key related tables?Can I use select_related or prefetch_related for getting the data from below tables如何从外键相关表中获取数据?我可以使用 select_related 或 prefetch_related 从下表中获取数据吗
【发布时间】:2015-05-11 18:37:25
【问题描述】:

如何查询这三个表以获取项目的所有用户、任务和项目名称的列表。如何在单个查询集中获取它们? 我正在使用 Django RestFramework 来序列化数据。

一个项目可以有 n 个用户和 n 个任务

class Project(models.Model):
    name = models.CharField(max_length = 60)

class Subtask(models.Model):
    task_name = models.CharField(max_length = 60)
    project = models.ForeignKey(Project, related_name = "project_tasks")

class Users(models.Model):
    user_name = models.CharField(max_length = 60)
    project = models.ForeignKey(Project, related_name = "project_user")

【问题讨论】:

    标签: python django django-models django-rest-framework django-orm


    【解决方案1】:

    prefetch_related 用于反向关系,这是您在此处从项目到子任务和用户所拥有的。所以:

    Project.objects.get(name=whatever).prefetch_related('project_tasks', 'project_users')
    

    (注意你应该与命名保持一致;关系是一对多的,所以你应该为related_name使用复数。同样,模型类名应该是单数,因为实例反映了一个项目,所以类应该是User。 )

    【讨论】:

    • 无法获取用户或任务数据。你能告诉我如何从返回的结果集中得到它吗
    • 就像您不使用 prefetch_related 时一样:my_project.project_tasks.all()
    • 但是当尝试像这样 queryData.project_tasks.task_name 时,它​​说'RelatedManager'对象没有属性'task_name'
    • 是的。它没有那个属性。因为project_tasks 是一个代表多个任务的查询集。因为这就是一对多的关系。
    • 哦,好吧,那我如何从查询集中获取“task_name”和“user_name”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2021-03-05
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多