Django查询聚合到DICES列表
我正在使用Django和Postgres,并且我有当前的设置(模型): A类: name = models.charfield() b = model.manytomanyfield(to = b) B类: c = erugenkeke(to = c) 量= models.integerfield() 我需要创建一个查询,该查询是从a返回B中的所有值作为字典列表. 我尝试了jsonbagg和arrayagg,但在尝试保存多个字段时没有运气. 示例查询: 来自django.contrib.postgres.aggregates.general Import jsonbagg A.Objects.annotate(test = JSONBAGG('nose')).值('名称','test')起作用! a.Objects.annotate(test = jsonbagg('量','c__id')).值('name','test')不起作用! 如何获得具有多个值的d
16 2024-01-20
编程技术问答社区
Django Postgresql ArrayField聚合
在我的Django应用程序中,使用PostgreSQL,我有一个带有Charfields阵列的模型. 我想知道是否有DB可以汇总并获取表中所有字符串的列表.例如: ['狗','cat'] ['狗'] ['cat'] 会产生['狗','cat'] 我知道如何在Python中做到这一点,但想找到一种在DB级别汇总的方法. 使用Django 1.8.4 解决方案 在PostgreSQL中您可以执行以下操作: SELECT DISTINCT UNNEST(array_column) FROM the_table; 所以如果您的模型看起来像 class TheModel(models.Model): # ... array_field = ArrayField(models.CharField(max_length=255, blank=True),\ default=list)
4 2024-01-20
编程技术问答社区
Django聚合表达式包含混合类型.必须设置output_field
我正在尝试实现聚合查询,这是我的代码: TicketGroup.objects.filter(event=event).aggregate( total_group=Sum(F('total_sold')*F('final_price'))) 我在Ticketgroup对象中具有'total_sold'和'Final_price',我要做的就是总和和乘数以将所有售票组的总售出在一起. 我得到的只是这个错误: 表达包含混合类型.您必须设置output_field 我在做什么错,因为我将" total_group"称为我的输出字段? 谢谢! 解决方案 by output_field django表示为Sum的结果提供现场类型. from django.db.models import FloatField, F total_group=Sum(F('total_sold')*F('final
2 2024-01-19
编程技术问答社区
如何在Django的相关模型中按带注释的Count()排序
我正在django建立食物记录数据库,我有一个与查询有关的问题. 我已经设置了模型,以通过M2M场"消费者"通过消费模型来包括(除其他外)(除其他外).食品模型描述了食品菜肴,消费模型描述了用户食用食物(日期,金额等). class Food(models.Model): food_name = models.CharField(max_length=30) consumer = models.ManyToManyField("User", through=Consumption) class Consumption(models.Model): food = models.ForeignKey("Food") user = models.ForeignKey("User") 我想创建一个查询,该查询返回该用户的食物对象出现的次数订购的所有食物对象(用户消费食物的次数). 我正在尝试以下线: Food.objects.all(
0 2024-01-19
编程技术问答社区
django:基于时间范围的聚合查询
我有以下模型,艺术和艺术: class Art(models.Model): title = models.CharField() class ArtScore(models.Model): art = models.ForeignKey(Art) date = models.DateField(auto_now_add = True) amount = models.IntegerField() 某些用户操作会导致ArtScore条目,例如,每当您单击"我喜欢此艺术"时,我都会为该艺术节省一定数量的ArtScore. 现在,我正在尝试显示"本周最受欢迎"的页面,因此我需要一个在该时间范围内仅进行ArtScore量的查询. 我构建了以下查询,但有缺陷... popular = Art.objects.filter( artscore__date__range=(weekago, today) ).annotate(
0 2024-01-19
编程技术问答社区
Django中的aggregate()与annotate()
django的QuerySet有两种方法,annotate和aggregate.文档说: 与engrentate()不同,Annotate()不是终端子句. Annotate()子句的输出是一个QuerySet. https:https:https:https:https:https:https://docs.djangoproject.com/en/4.1/topics/db/aggregation/#generating-aggregates-for-each-iatem-in-a-a-queryset 它们之间还有其他区别吗?如果不是,那为什么aggregate存在? 解决方案 我将重点放在示例查询上,而不是您从文档中引用的报价. Aggregate计算整体 querySet的值. Annotate计算 QuerySet中每个项目的摘要值. 聚合 >>> Book.objects.aggregate(average_price=Avg('price'
4 2024-01-19
编程技术问答社区
Django。通过查询计算列值的总和
我有一个模型: class ItemPrice(models.Model): price = models.DecimalField(max_digits=8, decimal_places=2) # ... 我尝试了此QuerySet中的price总和: items = ItemPrice.objects.all().annotate(Sum('price')) 此查询有什么问题?还是有其他方法可以计算price列的总和? 我知道这可以通过在QuerySet上使用循环来完成,但我需要一个优雅的解决方案. 谢谢! 解决方案 您可能正在寻找 aggregate from django.db.models import Sum ItemPrice.objects.aggregate(Sum('price')) # returns {'price__sum': 1000} for example 其他解决方案 使用.ag
8 2024-01-19
编程技术问答社区
Django admin inline: select_related
使用django 1.8在python 3.4.1上使用模型: class Product(models.Model): name = models.CharField(max_length=255) # some more fields here def __str__(self): return self.name class PricedProduct(models.Model): product = models.ForeignKey(Product, related_name='prices') # some more fields here def __str__(self): return str(self.product) class Coming(models.Model): # some unimportant fields here class ComingP
0 2024-01-19
编程技术问答社区
Django检查QuerySet的型号类型的最佳方法
我有一个Django动作函数,我想基于不同模型在QuerySet上使用该功能. 检查我的QuerySet组成的模型类型的最佳方法是什么?说我想检查我的模型中定义的图书馆类.Py 目前我可以使用 来工作 for object in queryset : if object.__class__.__name__ == "Library" ,但我相信有更好的方法可以做到这一点. 我以某种方式使用querySet.model做某事. 我已经尝试了以下内容,但它没有做我想要的事情: import myapp.models.Library def my function(modeladmin,request queryset ) if isinstance(queryset.model , Library ) : # do something specific here 解决方案 好吧,我明白了,我使用is而不是isins
12 2024-01-09
编程技术问答社区
在Django中对Window函数进行过滤
我有以下模型: class Foobar(models.Model): foo = models.IntegerField() 我想出了如何通过使用窗口函数来计算连续foo字段的增量: qs = Foobar.objects.annotate( delta=F('foo') - Window( Lag('foo'), partition_by=F('variant'), order_by=F('timestamp').asc(), ) ) 现在,我只想从此记录delta是负面的: qs.filter(delta__lte=0) ,但正如您所期望的那样,这给出了一个错误: django.db.utils.NotSupportedError: Window is disallowed in the filter clause. 我该如何使用django orm进行过滤? 解决
4 2023-12-05
编程技术问答社区
Django高级过滤
我可以根据模型字段的选择过滤QuerySet吗? 模型: COLORS = ( ('BLACK', 'black'), ('RED', 'red'), ('BLUE', 'blue'), //etc.. ) class Thing(Models.model): color = models.CharField(max_length=5, choices=COLORS) 查看: def filter_by_color(request): q = Thing.objects.filter(???) 是否有一种方法可以根据不同的颜色选择过滤Thing?另外,是否有一种动态写入此内容的方法,以便所有颜色选择都可以响应单个视图? 解决方案 您想要这个吗? 查看 def filter_by_color(request, color): q = Thing.objects.filter(colo
2 2023-11-19
编程技术问答社区
django在验证时将自己排除在查询集之外
我正在使用自己的清洁方法,以查看其他表是否已经具有具有相同字符串的字段. 只要我创建一个,这一切都可以了,但是当我尝试编辑它时,它会发现"自身"并回馈错误. 现在我想知道如何在干净的方法中排除实例本身 def clean_name(self): raw_data = self.cleaned_data['name'] data = raw_data.title() if Country.objects.filter(name=data).exists(): raise forms.ValidationError(("There is already a country with the name: %s") % data) if Province.objects.filter(name=data).exists(): raise forms.ValidationError(("There is already a p
4 2023-11-12
编程技术问答社区
在Django中使用uuid查询一个对象
我正在使用UUID来创建一个ID字段,该字段是 的主要键 import uuid class User_Profile(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 因此,每当我们将对象保存到数据库中时,它将作为一个UUID实例保存而不是字符串,如 user_profiles = User_Profile.objects.values_list('id', flat=True) print user_profiles [UUID('193b6acc-2b78-4ddc-9ef8-632cde33ef74')] 现在如何使用django orm查询它?由于它不是作为字符串保存的 user_profile = User_Profile.objects.get(id='193b6acc-2b78-4ddc-9ef8-632cde3
14 2023-11-12
编程技术问答社区
我如何在Django中测试空的查询集?
我正在测试Django中的视图,该视图应从对象中删除所有标签.为此,我使用此断言: self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[]) 效果很好,因为我收到一个空列表回报.我将Django QuerySet包裹在列表中,以避免以下内容: AssertionError: [] != [] 将空的django queryset与一个空列表进行比较. ,但由于这不是我非常喜欢的东西,我想知道是否有更好的方法进行测试. 解决方案 只需使用/p> self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists()) 其他解决方案 self.assertEqual(Tag.objects.get_for_object(Animal.objects.get(pk=1
0 2023-11-07
编程技术问答社区
嘲弄一个Django Queryset,以测试一个接受queryset的函数
我在我的django项目中具有实用程序功能,它需要一个QuerySet,从中获取一些数据并返回结果.我想为此功能编写一些测试.无论如何是否有"模拟" QuerySet?我想创建一个不会触及数据库的对象,我可以为其提供使用的值列表(即一些假行),然后它将像QuerySet一样行动,并允许某人可以在IT/filter/get/all等上进行现场查找. 已经存在类似的东西吗? 解决方案 不是我知道的,但是为什么不使用实际的QuerySet呢?设置了测试框架以允许您在测试中创建示例数据,并且在每个测试中都重新创建了数据库,因此似乎没有任何理由不使用真实的东西. 其他解决方案 对于一个空的QuerySet,我只需使用none keithhackbarth已经说过 . 但是,要模拟将返回值列表的QuerySet,我更喜欢使用from django.test import TestCase from mock import Mock from .models import
16 2023-11-07
编程技术问答社区
需要根据找到的Q对象对Django querySet进行注释
因此,我有一个带有一些Q对象的查询(以实现联合),并且我想注释Q对象与匹配的每个结果.当我去显示我的查询结果时,我可以突出显示每个结果都列出了哪些搜索词. 这是产生结果QuerySet的代码: Gene.objects.filter(Q(EC__EC='3.2.1.4')|Q(Protein_Family__name__in=famList)|Q(Pfam__Pfam__in=pfams),Protein_length__gte=100, Distance_From_Contig_Upstream__gte=10, Distance_From_Contig_Downstream__gte=10).distinct() 我认为我可以使用.Extra选项添加此注释的列: 型号/QuerySets/#Extra 如果我不能这样做,我可能会进行三个单独的查询,然后注释结果,然后将QuerySets一起注释...我认为这可能很浪费,而且似乎很笨拙. 解决方案 如果您用
0 2023-11-06
编程技术问答社区
在一个连续循环的脚本中,DB数据的变化没有反映在Django查询集中
我正在使用django的ORM从DB中获取新添加的条目,然后将其传递到消息队列.我在循环时以无限的方式进行此操作,即使我在此脚本运行时添加/删除/编辑条目,我也会得到相同的QuerySet的问题, 代码是这样的: while True : sleep(10 seconds) # Below is the problem line, I get the same query-set every time in new_objects # even when I have added/deleted/edited entries while this daemon is running. new_objects = Model.objects.filter(some condition) # Process new_objects and send them to MQ . . and so on 我该怎么做才能反映每
0 2023-10-25
编程技术问答社区
Django在将DateTimeField保存到数据库时,是否会破坏对时区的感知?
我有一个django模型,如所述 在这里 我创建并保存了此模型的实例: >>> from django.db.models import Max, F, Func >>> from django.conf import settings >>> import pytz, datetime >>> from myapp.models import myModel >>> myModel.objects.all().delete() >>> myModel.objects.create( my_date=datetime.datetime(2037,4,2,15,18,17,tzinfo=pytz.UTC), my_string="asda" ) 然后,我尝试检索我刚刚插入的实例,但是我以本机格式获得DateTimeField,并在应用UNIX_TIMESTAMP: 之后 >>> x = myMod
4 2023-10-22
编程技术问答社区
Django 1.4-assertQuerysetEqual-how to use method
我想知道testcase.sertquerysetequal方法的工作原理.我以不同的方式尝试了它,他们每个人都带领我遇到了另一个错误消息. #create a backup of all records in the tree tree_record_backup = list(Tree.objects.all()) #do some updates on another table, which should not affect the tree table if everything goes wrong #check if list of tree records did not changed tree_record_qs = Tree.objects.all() #Number1: self.assertQuerysetEqual(tree_record_qs,[repr(tree_record_backup)]) #Number2: self.assertQue
6 2023-10-17
编程技术问答社区
在模板中使用django querysets是否会冲击数据库?
当调用非上下文值时,模板值标签会迫使django击中数据库吗? 例如: {{ request.user.username }}是显示当前登录的用户用户名的调用.但是,{{ request.user.someobject_set.all }}之类的东西会将fk的QuerySet转移到模板中. 用户的someobject集合默认情况下会被倾倒到上下文中,还是我需要在我的视图的def get_context_data中进行上下文条目?并且通过扩展,协会可能会发现的其他任何非重新要求对象? 以下文档显示了何时在RAW PYTHON中评估QuerySet,但并没有真正提及模板和视图及其关系. . 解决方案 评估模板中的事物与在其他任何地方进行评估完全相同.当渲染模板时,将解决变量,如果所指对象需要数据库查找,则该对象将执行一个.但这不是模板做任何聪明的事情,而只是告诉request.user以获取其someobject_set属性,然后在其上调用all,这与pyt
12 2023-10-15
编程技术问答社区