Python Django:对生成的联合查询运行查询

Python Django:对生成的联合查询运行查询,python,mysql,django,group-by,union,Python,Mysql,Django,Group By,Union,有没有办法用Django的ORM编写这个原始查询?我试图避免使用原始查询,因为我希望对生成的查询运行其他筛选器 我将展示我目前正在做的事情,这可能是错误的,但我想要的最终结果是有一个收件箱,它首先显示出现一些新操作的条目,然后根据它们的提交日期列出所有其他条目 SELECT result.id, max(result.submit_date) submit_date, FROM ( (SELECT table_A.submit_date, table_A.id, FROM ta

有没有办法用Django的ORM编写这个原始查询?我试图避免使用原始查询,因为我希望对生成的查询运行其他筛选器

我将展示我目前正在做的事情,这可能是错误的,但我想要的最终结果是有一个收件箱,它首先显示出现一些新操作的条目,然后根据它们的提交日期列出所有其他条目

SELECT result.id,
max(result.submit_date) submit_date, 
FROM (
  (SELECT
  table_A.submit_date,
  table_A.id,
  FROM table_A INNER JOIN table_B ON
  (table_A.domain_id = table_B.id) WHERE 
  (table_B.company_id = 3 AND table_A.deleted = FALSE))  

  UNION

  (SELECT
  (time) AS submit_date,
  (table_C.table_A_id) AS id,
  FROM table_C INNER JOIN table_A ON 
  (table_C.table_A_id = table_A.id) WHERE
  (table_C.verb_type IN (8, 9, 14) AND 
  table_C.company_id = 3 AND table_A.deleted = FALSE) )
) result

GROUP BY result.id ORDER BY 2 DESC;
更新: 以下是我的模型:

#inbox entries
class table_A(models.Model):
  domain = models.ForeignKey(table_B)
  submit_date = models.DateTimeField(auto_now_add=True)
  deleted = models.BooleanField(default=False)


#domain entries
class table_B(models.Model):
  company = models.ForeignKey(table_D)
  domain = models.CharField(max_length=50)
  active = models.BooleanField(default=True)


#action entries associated with table_A (inbox entries)
class table_C(models.Model):
  GAMMA = 0
  OMEGA = 1
  PHI = 8
  CHI = 9
  SIGMA = 14
  VERB_CHOICE = (
    (GAMMA, 'action gamma'),
    (OMEGA, 'action omega'),
    (PHI, 'action phi'),
    (CHI, 'action chi'),
    (SIGMA, 'action sigma'),
  )
  company = models.ForeignKey(table_D)
  active = models.BooleanField(default=True)
  ref_t_A = models.ForeignKey(table_A)
  verb_type = models.SmallIntegerField(
    choices=VERB_CHOICES,
    default=GAMMA,
    db_index=True
  )
  time = models.DateTimeField(
    verbose_name='date of entry creation',
    auto_now_add=True,
    db_index=True
  )

 # company entries
 class table_D(models.Model):
   name = models.CharField(max_length=100)
   create_date = models.DateTimeField(
     verbose_name='date account created',
     auto_now_add=True
   )
   active = models.BooleanField(default=True)
到目前为止,我可以使用Django ORM在表a(收件箱条目)和表C(条目上的操作)之间创建一个联合,但是我想执行外部选择或其他完全执行此操作的方法,以便最终结果按我需要的方式排序,新修改的条目根据其操作日期列在顶部,其余条目根据其提交日期列在下面(因为它们还没有与之关联的操作):

原始查询的目的是按照表_C中与之关联的最新操作对表_A中的条目进行排序,如果表_C中没有与之关联的操作,则使用提交日期。一旦获得与表_A中条目关联的最新操作或提交日期,然后,我想根据最新行动的日期或提交日期来订购结果


我想在z上运行过滤器,以及任何其他操作,就像它是来自表a模型的查询集一样。

请向您展示模型并添加信息您想要什么结果。好的@Bear Brown,我更新了所有内容,我非常感谢您提供的任何帮助我解决此问题的见解,如果您有更多的信息,请不要犹豫,再次感谢。请向您展示模型并添加信息您想要什么结果。好的@Bear Brown,我更新了所有内容,我非常感谢您提供的任何见解来帮助我解决此问题,如果您有更多的信息,请不要犹豫,再次感谢。
x = table_A.values_list( 'submit_date', 'id',)
y = table_C.objects.filter(
  company_id=2,
  verb_type__in=[
    table_C.PHI,
    table_C.CHI,
    table_C.SIGMA
  ]
  ref_t_A__deleted=False
).extra(
  select={
    'id': 'ref_t_A_id',
    'submit_date': 'time',
  }
).values_list('id', 'submit_date',)

z = x.union(y)