看如下代码:
select = {
'read_flag': 'exists (select * from project_notice_read where user_id = 1 and notice_id=project_notice.id) '
}
msg = ProjectNotice.objects.filter().extra(tables=['project_notice', 'project_notice_read'],
select=select,
where = [
'project_notice.project_id=1 and (project_notice.id in '
'(select b.notice_id from project_notice_private b where'
' b.project_id=%s and b.role_id=2) or project_notice.is_public=1)',
],
params = (1,))
需求:获取项目公告,并附带是否阅读标志。
解释:
select用来增加不属于原表的字段,且返回值只能有一个。
如果select里面有参数,通过 select_params来赋值。
tables指定用到的表名。
where用来编写原生sql里面where后面的条件,参数用%s代替。
params用来赋值where里面的参数,防sql注入,类型为元组。