我有许多模型,它们有数百个实例。在这些实例中,存在对所有这些实例都是“全局”的信息。举个例子,我有一个'Sites‘模型,它有很多实例。我想有一个‘元字段’,如last_global_update,这将有最后一次所有这些网站作为一个组更新。
所以我有一个类方法'update‘,它通过Site.update()调用,用最新的信息更新所有的站点实例。理想情况下,应该有一个更新字段,该字段提供上次调用的日期时间Site.last_global_update ()。
你知道如何实现这一点吗?我尝试过使用元类做很多不同的事情,但都不起作用--我不能让模型字段动态更新并存储在元类中。
发布于 2015-11-18 05:50:07
我最终使用的解决方案是:
class classproperty(property):
def __init__(self, f):
property.__init__(self, classmethod(f))
def __get__(self, cls, owner):
return self.fget.__get__(None, owner)()
class MetaInformation(models.Model):
''' Class to hold meta information about any base class. Unique
in the database for each base class '''
last_global_update = models.DateTimeField(default=dt.now)
name = models.CharField()
@classmethod
def get_last_global_update(self, base_class):
return self.objects.get_or_create(name=base_class)[0].last_global_update
@classmethod
def update(self, base_class):
s = self.objects.get_or_create(name=base_class)[0]
s.last_global_update = dt.now()
s.save()
class Site(models.Model):
@classproperty
def last_global_update(self):
return MetaInformation.get_last_global_update('Site')
@classmethod
def update(self):
MetaInformation.update('Site')https://stackoverflow.com/questions/33766629
复制相似问题