序幕:
这是SO中经常出现的问题:
并且可以应用于上述以及以下内容:
我想在SO文档上撰写一个例子,但是自2017年8月8日关闭以来,我将按照这个广泛赞成和讨论的元回答的建议,并将我的例子写成一个自我回答的帖子.
当然,我也很乐意看到任何不同的方法!
题:
的Django/GeoDjango内置有一些数据库功能,如Lower()或MakeValid()它可以像这样使用:
Author.objects.create(name='Margaret Smith')
author = Author.objects.annotate(name_lower=Lower('name')).get()
print(author.name_lower)
Run Code Online (Sandbox Code Playgroud)
有没有办法根据现有的数据库函数使用和/或创建自己的自定义数据库函数,如:
Position() (MySQL的)TRIM() (SQLite的)ST_MakePoint() (PostgreSQL与PostGIS)如何在Django/GeoDjango ORM中应用/使用这些功能?
我有一个Booking有start和enddatetime字段的模型.我想知道预订的天数.我可以在Python中执行此操作,但我需要此值以进行进一步注释.
这是我尝试过的:
In [1]: Booking.objects.annotate(days=F('end')-F('start'))[0].days
Out[1]: datetime.timedelta(16, 50400)
Run Code Online (Sandbox Code Playgroud)
这里有一些问题:
在Python中,我会这样做(end.date() - start.date()).days + 1.我怎样才能在数据库中做到这一点,最好是通过ORM(例如数据库函数),但是RawSQL这样就足以让它出门了?
我正在学习 Django,我需要知道我是否可以将数据库中已经存在的表链接到模型(因为我听说 Django 为我们在 django app 中创建的任何模型创建了表)。
如果是这样,怎么做?
django django-models django-database django-database-functions