django queryset具有多个连接和过滤

发布于 2025-01-21 19:32:03 字数 998 浏览 3 评论 0原文

我需要一份与所有者一起加入的工作的工作列表,

该行应包含: JOB_ID,JOB_WORKER_ROLE1,JOB_WORKER_ROLE2,JOB_WORKER_ROLE3,HOUSE_ID, *所有者_name,所有者_STATUS_NAME,所有者_ASSIGNED_USER,

鉴于房屋和所有者之间有许多关系,每个人都可以接受每个工作,每个所有者都可以接受多个结果。

class Worker:
    name = models.CharField()

class OwnerStatus:
    name = models.CharField()

class Owner:
    name = models.CharField()
    status = models.ForeignKey(OwnerStatus, related_name='owners')
    assigned_worker = models.ForeignKey(Worker, related_name='assigned_user_owner')

class House:
    owners = models.ManyToManyField(Owner, related_name='assets')

class Job:
    house = models.ForeignKey(House, related_name='jobs')
    worker_role1 = models.ForeignKey(Worker)
    worker_role2 = models.ForeignKey(Worker)
    worker_role3 = models.ForeignKey(Worker)
    updated_at = models.DateTimeField(auto_now=True)

另外,我需要通过以下方式过滤:

  • 所有者状态名称或所有者状态ID
  • 所有者名称为字符串
  • 所有者分配的工作名称为字符串,

我正在使用django 4.0.1带有Postgres

I need a list of jobs joined with houses joined with owners

Results row should contain:
job_id, job_worker_role1, job_worker_role2, job_worker_role3, house_id, *owner_name, owner_status_name, owner_assigned_user

Given that there is a many to many relationship between houses and owners it is acceptable to have multiple result rows for each job, with each owner.

class Worker:
    name = models.CharField()

class OwnerStatus:
    name = models.CharField()

class Owner:
    name = models.CharField()
    status = models.ForeignKey(OwnerStatus, related_name='owners')
    assigned_worker = models.ForeignKey(Worker, related_name='assigned_user_owner')

class House:
    owners = models.ManyToManyField(Owner, related_name='assets')

class Job:
    house = models.ForeignKey(House, related_name='jobs')
    worker_role1 = models.ForeignKey(Worker)
    worker_role2 = models.ForeignKey(Worker)
    worker_role3 = models.ForeignKey(Worker)
    updated_at = models.DateTimeField(auto_now=True)

Also, I need to filter by:

  • owner status name or owner status id
  • owner name as string
  • owner assigned worker name as string

I am using Django 4.0.1 with postgres

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒浓于脸红 2025-01-28 19:32:03

您可以使用以下过滤:

所有者状态名称或所有者状态ID:

from django.db.models import Q
filterd_jobs = Job.objects.filter(Q(house__owners__status__name='status_name') | Q(house__owners__status_id='status_id'))

所有者名称为字符串

filterd_jobs = Job.objects.fitler(house__owners__name='owner_name')

所有者分配的工作名称为字符串

filterd_jobs = Job.objects.fitler(house__owners__assigned_worker__name='assigned_worker_name')

You can filter with the following:

Owner status name or owner status id:

from django.db.models import Q
filterd_jobs = Job.objects.filter(Q(house__owners__status__name='status_name') | Q(house__owners__status_id='status_id'))

Owner name as string

filterd_jobs = Job.objects.fitler(house__owners__name='owner_name')

owner assigned worker name as string

filterd_jobs = Job.objects.fitler(house__owners__assigned_worker__name='assigned_worker_name')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文