翻译这个查询集?
Traslate this queryset?
我的查询是在 MYSQL 中进行的 我想知道如何将它翻译成 Django 的 ORM 谢谢你
SELECT *,(SELECT count(*)
FROM tesisnueva.donador_desactivar ds
where ds.motivo=1 and
ds.donador_id= dd.id and
date_add(ds.fecha_desactivar, INTERVAL 90 DAY)<now()) as cantidad
FROM tesisnueva.donador_donador dd
where dd.genero='F';
我的模型
class Donador(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
hospital = models.ForeignKey(Hospital, null=True, blank=True, on_delete=models.SET_NULL)
fecha_nacimiento = models.DateField(validators=[check_date])
direccion = models.CharField(max_length=50,null=False,blank=False)
genero = models.CharField( max_length=1 , choices = GENERO, default='M')
grupo_sanguineo = models.CharField(max_length=10,choices=GRUPO_SANGRE, default='A')
factor_RH = models.CharField(max_length=2, choices=FACTOR_SANGRE, default='+')
telefono = models.CharField(max_length=12)
activo = models.BooleanField(default=0)
groups = models.ForeignKey(Group, null=True, blank=True, on_delete=models.CASCADE)
class Desactivar(models.Model):
donador = models.ForeignKey(Donador,on_delete=models.CASCADE)
motivo= models.IntegerField()
fecha_desactivar=models.DateField()
您可以利用.annotate(…)
[Django-doc] and use a filter=…
parameter [Django-doc]来相应地过滤相关模型:
from datetime import timedelta
from django.db.models import Q
from django.utils.timezone import now
Donador.objects.filter(genero='F')<b>.annotate(</b>
cantidad=Count(
'desactivar',
filter=<b>Q(motivo=1, fecha_desactivar=now()-timedelta(days=90))</b>
)
<b>)</b>
由此查询集产生的 Donador
个对象有一个额外的属性 .cantidad
,其中包含满足给定过滤器的相关 desactivar
个对象的数量。
我的查询是在 MYSQL 中进行的 我想知道如何将它翻译成 Django 的 ORM 谢谢你
SELECT *,(SELECT count(*)
FROM tesisnueva.donador_desactivar ds
where ds.motivo=1 and
ds.donador_id= dd.id and
date_add(ds.fecha_desactivar, INTERVAL 90 DAY)<now()) as cantidad
FROM tesisnueva.donador_donador dd
where dd.genero='F';
我的模型
class Donador(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
hospital = models.ForeignKey(Hospital, null=True, blank=True, on_delete=models.SET_NULL)
fecha_nacimiento = models.DateField(validators=[check_date])
direccion = models.CharField(max_length=50,null=False,blank=False)
genero = models.CharField( max_length=1 , choices = GENERO, default='M')
grupo_sanguineo = models.CharField(max_length=10,choices=GRUPO_SANGRE, default='A')
factor_RH = models.CharField(max_length=2, choices=FACTOR_SANGRE, default='+')
telefono = models.CharField(max_length=12)
activo = models.BooleanField(default=0)
groups = models.ForeignKey(Group, null=True, blank=True, on_delete=models.CASCADE)
class Desactivar(models.Model):
donador = models.ForeignKey(Donador,on_delete=models.CASCADE)
motivo= models.IntegerField()
fecha_desactivar=models.DateField()
您可以利用.annotate(…)
[Django-doc] and use a filter=…
parameter [Django-doc]来相应地过滤相关模型:
from datetime import timedelta
from django.db.models import Q
from django.utils.timezone import now
Donador.objects.filter(genero='F')<b>.annotate(</b>
cantidad=Count(
'desactivar',
filter=<b>Q(motivo=1, fecha_desactivar=now()-timedelta(days=90))</b>
)
<b>)</b>
由此查询集产生的 Donador
个对象有一个额外的属性 .cantidad
,其中包含满足给定过滤器的相关 desactivar
个对象的数量。