我想从字面上将字符串添加到查询集对象。为什么,因为我将它发送到 JSON,将信息放在那里并使其可用而无需遍历查询集将其转换为自定义字典,这将非常好和干净。
我现在所拥有的:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score'),
)
Run Code Online (Sandbox Code Playgroud)
这让我明白:
{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0}
Run Code Online (Sandbox Code Playgroud)
我想得到的是:
{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0, "additional_value": "name of candidate"}
Run Code Online (Sandbox Code Playgroud)
我很想通过调用这样的东西来获得它:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score'),
additional_value=Literal(candidate.name),
)
or this:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score')
).append(
additional_value=str(candidate.name),
)
Run Code Online (Sandbox Code Playgroud)
关于这是否可能的任何想法?
我有一个需要手动管理事务的视图功能,但是当我应用@transaction.commit_manually装饰器时,django总是提出以下异常.
从下面的代码跟踪中可以看出,事务是在从视图返回之前提交的.
我使用django 1.4在Windows和Linux上使用sqlite.
以下是django_trace的输出,后跟异常.要清楚:无论我是否使用django_trace,都会发生这种情况,并且当没有装饰器时,不会引发任何异常.这不是由"吞噬"异常引起的.
请注意,下面的第60行位于上下文处理器内部,因此位于commit_manually包装视图之外.
01->mainapp.views:1321: transaction.commit()
01->mainapp.views:1322: return render_to_response('mainapp/templates/incorporate.html',
01->mainapp.views:1323: RequestContext(request, form_params))
02-->mainapp.views:60: transaction.rollback_unless_managed()
02-->mainapp.views:61: return {'home_login_form': AuthenticationForm(request)}
Traceback (most recent call last):
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application(environ, start_response)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application(environ, start_response)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\wsgi.py", line 241, in __call__
response = self.get_response(request)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 179, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 221, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 111, …Run Code Online (Sandbox Code Playgroud) 如果我有一个外键的Book模型,Author我怎么能限制作者是一个有效的外键.例如,如果Author包含一个work_authored字段,我只希望Books能够将其work_authored字段设置为"books"的foreigkey作者(与其他值相关,如'articles','essays','plays').
我的场景(和TL; DR):我希望我的记录只能输出布尔字段设置为true的其他记录.
我很确定这可以通过Django的对象验证来完成,但这并不限制Django管理员下拉列表中的值.
我只是想知道为什么你需要使用通过的多对多关系,如果你只是可以使用一个单独的模型?
例如:
class Test(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Indicator(models.Model):
name = models.CharField(max_length=100)
target_value = models.IntegerField()
class TestResult(models.Model):
test = models.ForeignKey(Test)
indicator = models.ForeignKey(Indicator)
actual_value = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我为什么要定义多对多关系?谢谢
我有一个代表foodtrucks的模型.
class FoodTruck(models.Model):
name = models.CharField(max_length=30)
location = models.TextField()
creation_date = models.DateTimeField(default=datetime.now)
start_date = models.DateTimeField(null=True, blank=True)
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
此表中将有许多行具有相同的名称(但位置不同).在我看来,我想按名称排序列表(出现次数最多).
示例表:
name | location | creation_date | start_date
clover | ABC | ...
chens | XYZ | ...
clover | ABC | ...
Run Code Online (Sandbox Code Playgroud)
我的目标是列出食品卡车以及它们在过去30天内在所有地点出现的次数,并按照最常见的次序排序.
如果我有这个查询集:
player = basketball.objects.all()
Run Code Online (Sandbox Code Playgroud)
如何在我要求多人的情况下进行过滤?例如:我只希望出现名字为"mike"或"charles"的玩家.这对我来说似乎不起作用:
player.filter(name = 'mike' , 'charles')
Run Code Online (Sandbox Code Playgroud)
有谁知道最好的方法吗?
假设我有以下django型号:
class ModelB(models.Model):
title = models.CharField(max_length=20)
class ModelD(models.Model):
name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
在django ORM中,我正在尝试读取一个字符串,该字符串将是模型的名称,并使用它来查询.像这样的东西:
>>b = 'ModelB'
>>b.objects.all()
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为它是一个字符串.我查看了ContentType,但我不确定它在我的场景中会有什么帮助.有什么建议?
我也尝试过像这样的get操作Contentype:
>>> z = ContentType.objects.get(model='modelb')
>>> z
<ContentType: model b>
>>> z.__dict__
{'model': u'modelb', '_state': <django.db.models.base.ModelState object at 0x7f195346c150>, 'id': 14, 'app_label': u'testapp'}
>>>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从这里继续前进!
我在这个答案中发现,我可以使用原始SQL轻松删除表中的重复行(基于N列的重复).
使用Django ORM是否存在等价?我在Django中发现的唯一内容仅基于1列重复.
注意:我知道有一种方法可以防止Django中的未来重复(基于几个字段),使用unique_together字段(但我以前不知道).
谢谢.
我有以下要执行的查询:
MyModel.objects.annotate(current_name=Coalesce('nickname', 'name')).order_by('current_name')
Run Code Online (Sandbox Code Playgroud)
因为昵称在空时不是NULL,但是它是一个空的char(就像Django社区中的惯例一样).
所以我想做的事情如下:
MyModel.objects.annotate(if empty char: make null, then do coalesce like above). Is this possible?
Run Code Online (Sandbox Code Playgroud) 假设我们有一个模型如下
class Cake(models.Model):
baked_on = models.DateTimeField(auto_now_add=True)
cake_name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
现在,有多个Cake是在同一天烘焙,我需要一个查询,它将返回每月蛋糕报告,其中包含每月的每一天,以及当天烘焙的第一个和最后一个蛋糕的名称.
例如,如果数据是这样的:
baked_on cake_name
11 Jan 12:30 Vanilla
11 Jan 14:30 Strawberry
11 Jan 20:45 Avocado
12 Jan 09:05 Raspberry
12 Jan 16:30 Sprinkles
12 Jan 20:11 Chocolate
Run Code Online (Sandbox Code Playgroud)
我的查询输出应该是这样的
date first last
11 Jan Vanilla Avocado
12 Jan Raspberry Chocolate
Run Code Online (Sandbox Code Playgroud)
我应该如何在单个ORM呼叫中执行此操作?
django django-models django-orm window-functions django-rest-framework