Django Orm gteater不是一个整数列表

2024-05-20 15:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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
        )

它会产生此错误

enter image description here

我觉得这其实非常非常简单,我遗漏了一些明显的东西,任何指导都会很有帮助

谢谢

编辑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

感觉这真的很低效


Tags: namefalsetrueverboseobjectsmodelsunitfilter
1条回答
网友
1楼 · 发布于 2024-05-20 15:28:20

根据评论中的讨论,似乎将条件更改为,获取图书表中的任何一本书,其价格高于2004年出版的任何一本书就足够了

这可以通过以下方式完成: 最低单价=

book_with_lowest_price_in_2004 = Book.objects.filter(pub_year=2004).aggregate(Min('unit_price')).get('unit_price__min']) # will provide the book with the lowest price in 2004
books_results = Book.objects.filter(unit_price__gt=book_with_lowest_price_in_2004)

相关问题 更多 >