使用 Django QuerySet 进行外键无约束连接
从内部结合(直积的结果中,用户ID相同的项目)中筛选。
Customer.objects.extra(
tables=['django_user'],
where=['customers.created_user_id=django_user.id']
).extra(select={'username': "django_user.last_name+django_user.first_name"})
SELECT (django_user.last_name+django_user.first_name) AS `username`,
`customers`.`id`,
`customers`.`created_at`,
`customers`.`created_user_id`
FROM `customers`,
`django_user`
WHERE (customers.created_user_id=django_user.id)
ORDER BY `customers`.`id` ASC
外部合作
以下是您要求的内容的中文回答:
您可以在此链接(https://stackoverflow.com/questions/21271835/left-join-django-orm)找到关于Django ORM中左连接的讨论。
https://github.com/django/django/blob/master/django/db/models/sql/datastructures.py#L26-L139 是Django框架中的一个文件,该文件包含了关于SQL数据结构的相关代码。
joinField = ForeignKey(
to=User,
on_delete=lambda: x,
)
joinField.opts = Options(Customer._meta)
joinField.opts.model = Customer
joinField.get_joining_columns = lambda: (("created_user_id", "id"),)
j = Join(
User._meta.db_table,
Customer._meta.db_table,
'T1',
"LEFT JOIN",
joinField,
True
)
q = Customer.objects.values()
q = q.extra(select={'username': "django_user.last_name+django_user.first_name"})
q.query.join(j)
print(q.query)