【发布时间】:2021-03-01 20:28:24
【问题描述】:
我对 Django 相当陌生,坚持在 Django 中创建左连接。我尝试了很多,但似乎都没有工作:
我要翻译成 Django 的查询是:
select ssc.id
,mgz.Title
,tli.id
,tli.Time
from Subscription ssc
join Person prs
on ssc.PersonID = prs.id
and prs.id = 3
join Magazine mgz
on mgz.id = ssc.MagazineID
and mgz.from <= date.today()
and mgz.until > date.today()
left join TimeLogedIn tli
on tli.SubscriptionID = ssc.id
and tli.DateOnline = date.today()
我使用的模型如下所示:
class Magazine(models.Model):
Title = models.CharField(max_length=100L)
from = models.Datefield()
until = models.Datefield()
Persons = models.ManyToManyField(Person, through='Subscription')
class Person(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Magazines = models.ManyToManyField(Magazine, through='Subscription')
class Subscription(models.Model):
MagazineID = models.ForeignKey(Magazine,on_delete=models.CASCADE)
PersonID = models.ForeignKey(Person,on_delete=models.CASCADE)
class TimeLogedIn(models.Model):
SubscriptionID = models.ForeignKey('Subscription', on_delete=models.CASCADE)
DateOnline = models.DateField()
Time = models.DecimalField(max_digits=5, decimal_places=2)
就像我说的,尝试了很多但没有成功,现在我不知道如何在 Django ORM 中做到这一点,这甚至可能吗?我已经创建了一个原始查询,这工作正常,但是如何在 Django ORM 中创建它?
【问题讨论】:
-
我想你可能想要一个带有
DateOnLine=date.today() | DateOnline__isnull=Truedocs.djangoproject.com/en/3.1/topics/db/queries/… 和之前类似问题stackoverflow.com/a/51210121/4872140 的Q 对象 -
感谢您的回答,如果我成功了,我会深入研究并告诉它
-
这是诀窍,谢谢你
标签: python django django-orm