我正在尝试将sql连接查询转换为django orm, 不太明白怎么做
型号
class Author(models.Model):
author_name = models.CharField(
verbose_name='Author', primary_key=True, max_length=250)
country = models.CharField(verbose_name='Country',
null=False, blank=False,
max_length=250)
def __str__(self):
return self.author_name
class Publisher(models.Model):
publisher_name = models.CharField(
verbose_name='Publisher', primary_key=True, max_length=250)
pub_add = models.TextField(verbose_name='Address', blank=False, null=False)
def __str__(self):
return self.publisher_name
class Book(models.Model):
isbn = models.IntegerField(verbose_name='ISBN',
primary_key=True)
title = models.CharField(verbose_name='Title',
unique=True,
blank=False,
null=False,
max_length=250)
pub_year = models.IntegerField(verbose_name='Publish Year',
blank=False,
null=False)
unit_price = models.IntegerField(verbose_name='Unit Price',
blank=False,
null=False)
authors = models.ForeignKey(Author,
verbose_name='Author of book',
on_delete=models.DO_NOTHING)
publishers = models.ForeignKey(Publisher,
verbose_name='Publisher of book',
on_delete=models.DO_NOTHING)
Sql查询是select distinct B1.title from Book B1, Book B2 where B1.unit_price > B2.unit_price and B2.pub_year = 2004;
我尝试过的django查询
qs = Book.objects.filter(
pub_year=2004
)
qs = Book.objects.filter(
unit_price__gt__in=qs
)
它会产生此错误
我觉得这其实非常非常简单,我遗漏了一些明显的东西,任何指导都会很有帮助
谢谢
编辑1:
我正在修补它,是我想出了这个
price_list = Book.objects.filter(
pub_year=2004
).values_list('unit_price', flat=True)
price_list = list(price_list)
price_list = sorted(price_list)
# qs = Book.objects.filter(
# unit_price__gt__in=qs
# )
# return qs
qs = Book.objects.filter(unit_price__gt=price_list[0])
return qs
感觉这真的很低效
根据评论中的讨论,似乎将条件更改为,获取图书表中的任何一本书,其价格高于2004年出版的任何一本书就足够了
这可以通过以下方式完成: 最低单价=
相关问题 更多 >
编程相关推荐