对问题的简短介绍......
UNNEST和ANY.djorm_pgarray它),但函数不是本机支持的..extra(),但Django 1.8引入了一个新的数据库功能概念.让我提供一个最原始的例子,说明我基本上对所有这些做了些什么.A Dealer有一个它支持的品牌列表.A Vehicle有一个品牌并且与经销商相关联.但事实上它Vehicle的制作与Dealer制作清单不匹配,这是不可避免的.
MAKE_CHOICES = [('honda', 'Honda'), ...]
class Dealer(models.Model):
make_list = TextArrayField(choices=MAKE_CHOICES)
class Vehicle(models.Model):
dealer = models.ForeignKey(Dealer, null=True, blank=True)
make = models.CharField(max_length=255, choices=MAKE_CHOICES, blank=True)
Run Code Online (Sandbox Code Playgroud)
拥有经销商和制造商的数据库,我想要计算车辆制造商及其经销商制造商列表所匹配的所有车辆.这就是我避免的方式.extra().
from django.db.models import functions
class SelectUnnest(functions.Func):
function = 'SELECT UNNEST'
...
Vehicle.objects.filter(
make__in=SelectUnnest('dealer__make_list')
).count()
Run Code Online (Sandbox Code Playgroud)
结果SQL:
SELECT COUNT(*) AS "__count" FROM "myapp_vehicle"
INNER JOIN "myapp_dealer"
ON ( "myapp_vehicle"."dealer_id" = "myapp_dealer"."id" )
WHERE …Run Code Online (Sandbox Code Playgroud) 问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非常非技术性的,如果他们能编写传统的人类可读的表达式来定义何时执行某些任务,那就太好了,例如:
这是受Todoist 的启发。目前,只需要日期;没有时间。我花了几个小时在谷歌上搜索图书馆来做到这一点,但没有运气。我期待一个函数,比如说in_range(expression, date),这样:
>>> in_range('every monday, wednesday', date(2014, 4, 28))
True
>>> in_range('every end of month', date(2014, 5, 12))
False
>>> in_range('every millenium', date(2014, 5, 8))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown token "millenium".
Run Code Online (Sandbox Code Playgroud)
变体。这就是我看过的。
datetime库进行日期解析,但不进行上述日期范围解析。rrule,非常实用,但仍然不支持解析。那么,是否有我错过的 Python …