2024-04-27 03:10:36 发布
网友
我的Django模型有一个名为“updatedOn”的日期时间字段,我需要在此模型上使用库函数来计算一些统计数据,但该函数假定日期时间字段名为“time”,下面是该函数如何使用日期时间:
c = qset.filter(time__year=tt.year, time__month=tt.month, time__day=tt.day).count();
在不接触库代码的情况下,如何创建别名“time”来引用“updatedOn”字段,以便使用该函数?
我还没有深入研究过,但直觉上,下面的一些方法可能会让你开始。
在筛选time时,使用修改的get_queryset方法查找updatedOn。
time
get_queryset
updatedOn
可以创建一个custom field type,它只作为对另一个字段的引用。
模型对象的_meta.fields似乎包含该对象中的字段列表。也许您可以尝试添加某种称为time的虚拟字段,它指的是updatedOn字段。
_meta.fields
为模型中的字段创建属性:
class MyModel(moels.Model): updated_on = models.DateTimeField() def _get_time(self): return self.updated_on time = property(_get_time)
这个旧的Django Snippet,为我工作,直到Django 1.11。正如@Jaberwocky所评论的,virtual_only在Django 2.0中被删除
virtual_only
但是,deprecation warning读取该字段已弃用in favor of ^{},尽管在上述链接中删除的功能中没有提到这一点。
class AliasField(models.Field): # def contribute_to_class(self, cls, name, virtual_only=False): # ''' # virtual_only is deprecated in favor of private_only # ''' # super(AliasField, self).contribute_to_class(cls, name, virtual_only=True) # setattr(cls, name, self) def contribute_to_class(self, cls, name, private_only=False): ''' virtual_only is deprecated in favor of private_only ''' super(AliasField, self).contribute_to_class(cls, name, private_only=True) setattr(cls, name, self) def __get__(self, instance, instance_type=None): return getattr(instance, self.db_column) class Order(models.Model): """ The main order model """ number = AliasField(db_column='id')
我还没有深入研究过,但直觉上,下面的一些方法可能会让你开始。
自定义管理器
在筛选
time
时,使用修改的get_queryset
方法查找updatedOn
。自定义字段类型
可以创建一个custom field type,它只作为对另一个字段的引用。
破解模型
模型对象的
_meta.fields
似乎包含该对象中的字段列表。也许您可以尝试添加某种称为time
的虚拟字段,它指的是updatedOn
字段。为模型中的字段创建属性:
这个旧的Django Snippet,为我工作,直到Django 1.11。正如@Jaberwocky所评论的,
virtual_only
在Django 2.0中被删除但是,deprecation warning读取该字段已弃用in favor of ^{} ,尽管在上述链接中删除的功能中没有提到这一点。
相关问题 更多 >
编程相关推荐