我有许多拥有数百个实例的模型。在这些情况下,有一些全球性的信息。对于他们所有人。举个例子,我有一个'网站'有很多实例的模型。我想要一个'元字段'例如last_global_update,它将最后一次将所有这些网站更新为一个组。
所以我有一个班级方法'更新'通过Site.update()调用,并使用最新信息更新所有站点实例。理想情况下,会有一个Site.last_global_update字段,该字段将最后调用datetime update()。
知道如何实现这一目标吗?我使用元类尝试了很多不同的东西,但没有任何作用 - 我不能动态更新模型字段并存储在元类中。
答案 0 :(得分:0)
解决方案我最终使用:
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')