Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用django ORM在数据库中创建函数_Django_Orm - Fatal编程技术网

使用django ORM在数据库中创建函数

使用django ORM在数据库中创建函数,django,orm,Django,Orm,在我的项目中,我想让人们在几天之间过生日,我希望找到一个解决方案,它不会对查询施加任何限制 我发现这似乎是有效的,适合我的问题。但现在我有第二个问题,就是使用django ORM在数据库中创建函数,因为它必须是可移植的,并且也可以与测试数据库一起使用。在django中,我找不到任何合适的方法来定义函数和基于它的索引 简而言之,我想使用django在数据库中创建以下函数: CREATE OR REPLACE FUNCTION indexable_month_day(date) RETURNS TE

在我的项目中,我想让人们在几天之间过生日,我希望找到一个解决方案,它不会对查询施加任何限制

我发现这似乎是有效的,适合我的问题。但现在我有第二个问题,就是使用django ORM在数据库中创建函数,因为它必须是可移植的,并且也可以与测试数据库一起使用。在django中,我找不到任何合适的方法来定义函数和基于它的索引

简而言之,我想使用django在数据库中创建以下函数:

CREATE OR REPLACE FUNCTION indexable_month_day(date) RETURNS TEXT as $BODY$
SELECT to_char($1, 'MM-DD');
$BODY$ language 'sql' IMMUTABLE STRICT;

CREATE INDEX person_birthday_idx ON people (indexable_month_day(dob));

要回答您的问题,可以使用将原始SQL插入到迁移中 --看起来您应该能够将这个原始SQL放入迁移文件中,包括创建自定义索引的函数。因此,运行迁移将在

但是不要这样做--Django只是用来索引
dob
字段,即

dob = models.DateField(db_index=True)

也可以使用Django编写查询。

但是
dob
是一个
日期字段,我只想使用其中的月份和日期,我会尽可能高效地完成这项工作,就像我在分享的帖子中解释的那样,因此,我认为仅使用
db_index
是不可能的。如果我在迁移中使用原始sql语句,我如何在我的git repo中跟踪它?您认为将此迁移添加到git repo是真的吗?我认为当另一个用户获得repo并使用
makemigrations
时,这可能会破坏迁移,因为应用的迁移顺序无法在那里定义。是的,将迁移放入git repo是标准做法。Django迁移有一些依赖顺序逻辑,以确保它们以正确的顺序运行。