[Django] 有没有可能使每个 Model 自动添加上必备3字段( 以及这种做法的可取性)?

实际现象

  1. 建表必备3字段: create_time, update_time, id
  2. 我在网上查了, 无非是定义一个 BaseModel 之类的
  3. 或者手动添加( 有更多的灵活性 )

预期现象

  1. 如果要做, 最好的做法是?
  2. 其实更多的疑惑是: 有必要这样吗? 其实貌似手动加也没啥工作量, 而且可控制性也很好

环境

  1. Django+ MySQL 5.6 + Linux
阅读 3k
2 个回答

如果要做, 最好的做法是?

基类(就是你说的 BaseModel)或元类。

其实更多的疑惑是: 有必要这样吗? 其实貌似手动加也没啥工作量, 而且可控制性也很好

没必要。而且 create_timeupdate_time 本来就不是所有表都需要的(有很多的关系表场景都不一定需要)。

如何正确的使用和设置Database和Model

class TimeStampedModel(models.Model):
    """
    abstract base class, 提供创建时间和修改时间两个通用的field
    """
    created = models.DateTimeField(u'生成时间', auto_now_add=True)
    modified = models.DateTimeField(u'修改时间', auto_now=True)
    
    class Meta:
        abstract = True

class Commit(TimeStampedModel):
    uid = models.CharField(max_length=255)
    content = models.TextField(max_length=1024)

    objects = BasisManager()
    
    def __unicode__(self):
        return u"%s:%s" % (self.uid, self.doc_id)
        
        

其实文档中说的非常清楚:模型继承

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏