
模型:
class Goods(models.Model): name=models.CharField(max_length=50,verbose_name='名称') image = models.CharField(max_length=250,verbose_name='封面图') is_banner = models.BooleanField(default=False,verbose_name='是否是轮播图') nav = models.ForeignKey('Nav',verbose_name='所属分类导航') 视图:
class HomeView(request): banner_queryset=Goods.objects.filter(is_banner=1)[:3] #首页 3 条轮播图数据 clothes_queryset=Goods.objects.filter(nav_id=1)[:5] #首页 5 条衣服数据 这两个查询语句,合成一个查询语句,如何写?
banner_queryset 、clothes_queryset 这两个查询出的结果,有些数据可能是重合的
1 uhian 2019-12-29 18:52:18 +08:00 没有切片的可以 result = queryset1 | queryset2 有切片操作的貌似不能这样 实在不行将 clothes_queryset 加一个 exclude(id__in=[b.id for b in banner_queryset])? |
2 SingeeKing PRO 搜索关键字:Django F |
3 SingeeKing PRO 哦不,是 Django Q |
4 uhian 2019-12-29 18:59:28 +08:00 @SingeeKing Q 也不能切片啊 |
5 SingeeKing PRO @uhian #4 他的切片可以直接用 limit 啊。。 |
6 uhian 2019-12-29 19:31:56 +08:00 @SingeeKing 切片不就是 LIMIT 么?还有别的操作? |
7 SingeeKing PRO @uhian #6 Django 竟然不能直接 Limit…… 搜了一下官方的说法,https://groups.google.com/forum/#!topic/django-users/Q4KB5qPlGtA 似乎没办法直接合 |
8 uhian 2019-12-29 20:15:19 +08:00 @SingeeKing Django 的切片,也就是[:3],实际做数据查询也就是转成 SQL 就是 limit。 Django 的 LIMIT 没啥问题,问题是两个带 LIMIT 的查询结果( QuerySet )直接求或,貌似是真不行。查询结果本身可以求或,还可以返回 distinct 结果。 |
9 dolaxi OP |