Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Join查询-仅显示包含一篇或多篇文章的类别_Python_Django - Fatal编程技术网

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连接。成功了!谢谢