LEFT JOIN Django ORM

前端 未结 4 1940
天命终不由人
天命终不由人 2020-11-28 07:30

I have the following models:

class Volunteer(models.Model):
    first_name = models.CharField(max_length=50L)
    last_name = models.CharField(max_length=50L         


        
4条回答
  •  被撕碎了的回忆
    2020-11-28 08:14

    for create custom join by OR

    def get_queryset(self):
        qs = super(AceViewSet, self).get_queryset()
        qs = qs.select_related('xxx')
        # construct all tables and the join dependence
        qs.query.__str__()
    
        qs.query.alias_map['xx_subject'].join_cols = (('xxx_id', 'uid'), ('xxx_id', 'ad_subject_id'))
        qs.query.alias_map['xx_subject'].as_sql = partial(self.as_sql, qs.query.alias_map['xx_subject'])
        return qs
    
    @staticmethod
    def as_sql(self, compiler, connection):
        sql, params = Join.as_sql(self, compiler, connection)
        or_sql = sql.replace("AND", "OR")
        return or_sql, params
    
    FROM "xx_ace"
      LEFT OUTER JOIN "xx_subject"
        ON ("xx_ace"."xxx_id" = "xx_subject"."uid" OR "xx_ace"."xxx_id" = "xx_subject"."ad_subject_id")
    

提交回复
热议问题