Python Django Join查询-仅显示包含一篇或多篇文章的类别
嗨,我正在尝试获取一些关于连接查询的帮助 我有一个交易模型和一个零售商模型。零售商模型是我的交易模型的外键。看起来像这样Python Django Join查询-仅显示包含一篇或多篇文章的类别,python,django,Python,Django,嗨,我正在尝试获取一些关于连接查询的帮助 我有一个交易模型和一个零售商模型。零售商模型是我的交易模型的外键。看起来像这样 class Deal(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=140, unique=True) description = RichTextUploadingField(default='') reta
class Deal(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=140, unique=True)
description = RichTextUploadingField(default='')
retailer = models.ForeignKey(Retailer, on_delete=models.CASCADE)
image = VersatileImageField('deal image',
upload_to=deal_upload_path,
null=True,
blank=True)
img_alt = models.CharField(max_length=140, default='')
link = models.URLField(max_length=2000, default='')
category = models.ForeignKey(Category, on_delete=models.CASCADE)
date_added = models.DateField(default=timezone.now)
date_expires = models.DateField(default=timezone.now)
price = models.CharField(max_length=140)
secondary_price = models.CharField(max_length=140, default='')
likes_total = models.IntegerField(default=1)
expired = models.BooleanField(default=False)
handpicked = models.BooleanField(default=False)
class Retailer(models.Model):
company = models.CharField(max_length=140)
slug = models.SlugField()
我只是想得到一份至少有一笔交易的零售商名单
我有一个上下文处理器,看起来像这样,但我很难确定将其更改为我需要的最佳方式。有什么想法吗
def retailers(request):
return {
'stores': Retailer.objects.all().order_by('company')
}
您可以使用Deal's和lookup:
UPD
您还可以使用filter
根据需要组合多个条件,并使用distinct
从结果中删除DUP:
Retailer.objects.filter(deal__isnull=False, deal__date_expires__gte=today).order_by('company').distinct()
您可以使用Deal's和lookup:
UPD
您还可以使用filter
根据需要组合多个条件,并使用distinct
从结果中删除DUP:
Retailer.objects.filter(deal__isnull=False, deal__date_expires__gte=today).order_by('company').distinct()
一种简单的方法是使用注释。在这方面有一个很好的章节
从django.db.models导入计数
queryset=Retailer.objects.annotate(
交易计数=计数(“交易”)
).exclude(交易计数=0)
这将添加一个字段,然后可以像其他字段一样使用。一种简单的方法是使用注释。在这方面有一个很好的章节
从django.db.models导入计数
queryset=Retailer.objects.annotate(
交易计数=计数(“交易”)
).exclude(交易计数=0)
这增加了一个字段,您可以像其他任何字段一样使用。我确实尝试过这个字段……看起来很接近,但出于某种原因,它显示了一些没有交易的零售商,而没有显示一些有交易的零售商。
Retailer.objects.annotate(c=Count('deal')).filter(c\u gt=1)。order\u by('company')
是的,我认为您不能这样过滤,因为SQL中没有“交易”列。我知道问题出在哪里——我忘了我排除了过期交易。我将查询改为此,但每次有(未过期)交易时,它都会列出零售商……看我可能做错了什么Retailer.objects.exclude(deal\uu isnull=True)。filter(deal\uu date\u expires\uu gte=today)。order\u by('company')
@SamBobel它正在工作。检查相关的\u查询\u名称
文档。Django将自动执行SQL连接。成功了!谢谢我确实尝试过这个…看起来很接近,但出于某种原因,显示了一些没有交易的零售商,而没有显示一些有交易的零售商Retailer.objects.annotation(c=Count('deal')).filter(c\u gt=1)。order_by('company')
是的,我认为你不能这样过滤,因为没有“交易”我知道问题是什么--我忘了我排除了过期的交易..我将查询改为此,但每次有(未过期的)交易时它都会列出零售商…看到我可能做错了什么吗Retailer.objects.exclude(deal\uu isnull=True)。filter(deal\uu date\u expires\uu gte=today)。order\u by('company')
@SamBobel它正在工作。检查相关的\u查询\u名称
文档。Django将自动执行SQL连接。成功了!谢谢