首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django.model元信息

Django.model元信息
EN

Stack Overflow用户
提问于 2015-11-18 04:44:42
回答 1查看 102关注 0票数 0

我有许多模型,它们有数百个实例。在这些实例中,存在对所有这些实例都是“全局”的信息。举个例子,我有一个'Sites‘模型,它有很多实例。我想有一个‘元字段’,如last_global_update,这将有最后一次所有这些网站作为一个组更新。

所以我有一个类方法'update‘,它通过Site.update()调用,用最新的信息更新所有的站点实例。理想情况下,应该有一个更新字段,该字段提供上次调用的日期时间Site.last_global_update ()。

你知道如何实现这一点吗?我尝试过使用元类做很多不同的事情,但都不起作用--我不能让模型字段动态更新并存储在元类中。

EN

回答 1

Stack Overflow用户

发布于 2015-11-18 05:50:07

我最终使用的解决方案是:

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33766629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档