Django.model元信息

时间:2015-11-17 20:44:42

标签: python django django-models

我有许多拥有数百个实例的模型。在这些情况下,有一些全球性的信息。对于他们所有人。举个例子,我有一个'网站'有很多实例的模型。我想要一个'元字段'例如last_global_update,它将最后一次将所有这些网站更新为一个组。

所以我有一个班级方法'更新'通过Site.update()调用,并使用最新信息更新所有站点实例。理想情况下,会有一个Site.last_global_update字段,该字段将最后调用datetime update()。

知道如何实现这一目标吗?我使用元类尝试了很多不同的东西,但没有任何作用 - 我不能动态更新模型字段并存储在元类中。

1 个答案:

答案 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')