现场:
我以这种方式拥有三个模型:
class Person(models.Model):
....
class Affiliate(models.Model):
persona = models.OneToOneField('Person', primary_key=True, db_column='id', parent_link=True, related_name='afiliado')
...
class Referred(models.Model):
persona = models.OneToOneField('Person', primary_key=True, db_column='id', parent_link=True, related_name='referido')
...
我需要序列化一些查询,我可以在其中说明此人是附属机构还是被推荐人。
在我的第一次尝试中,我构建了类似的东西:
Person.objects.all().values_list('afiliado__pk') #this is because of the related_name in the relation
抛出这个 SQL:
SELECT `afiliado`.`id` FROM `persona` LEFT OUTER JOIN `afiliado` ON (`persona`.`id` = `afiliado`.`id`)
结果是:
[(None,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,), (10,), (11,), (12,), (13,), (14,), (15,), (16,), (17,), (18,), (19,), (20,), '...(remaining elements truncated)...']
我想要类似的东西:
[(False,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), (True,), '...(remaining elements truncated)...']
如果左连接的结果为空,则为 False,如果左连接的结果是记录的 id,则为 True。
此外,我尝试了类似的东西:
qs = Persona.objects.all().extra(select={'es_afiliado':"cast( afiliado
. id
as boolean)"}).values_list('es_afiliado','afiliado__pk')
但我得到了这个错误:
DatabaseError: syntax error at or near "."
LINE 1: SELECT (cast(`afiliado`.`id` as boolean)) AS "es_afiliado", ...
所以,如果你们知道通过 django 获得这个的任何方法,或者甚至在 postgres 中使用额外的或至少是普通的 SQL 语句会很棒。