Django:为可重用模型字段创建Mixin

Django:为可重用模型字段创建Mixin,django,inheritance,model,meta,mixins,Django,Inheritance,Model,Meta,Mixins,我有几个字段要添加到项目中的大多数模型中。例如,这些字段是“跟踪字段”,例如创建日期、更新日期和“活动”标志。我正在尝试创建一个Mixin,我可以将它添加到每个模型类中,从而允许我通过多重继承添加这些额外的字段。但是,当创建对象实例时,通过Mixin添加的模型字段似乎显示为对象的方法,而不是数据库字段 In [18]: Blog.objects.all()[0].created Out[18]: <django.db.models.fields.DateTimeField object a

我有几个字段要添加到项目中的大多数模型中。例如,这些字段是“跟踪字段”,例如创建日期、更新日期和“活动”标志。我正在尝试创建一个Mixin,我可以将它添加到每个模型类中,从而允许我通过多重继承添加这些额外的字段。但是,当创建对象实例时,通过Mixin添加的模型字段似乎显示为对象的方法,而不是数据库字段

In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
所以这似乎不起作用。有人知道我如何为类似于上面的公共模型字段创建可重用的mixin吗?这种方法有缺陷吗

谢谢你的帮助, 乔

更新:请注意,我计划在MPTT模型中使用mixin的一些模型,因此我不能简单地将TrackingFieldMixin混入基类并仅从中继承

class Post(MPTTModel, TrackingFieldMixin):
    post_name = models....
    post_type = models...

抽象模型仍然需要从
模型继承。模型
要正确工作:

class TrackingFieldsMixin(models.Model):
此外,我将在
日期时间字段
上添加一个
已删除的
字段,以代替您的
活动
布尔字段
,这样您就可以在删除记录时进行记录。然后,只需在实例上添加属性即可查看其是否处于活动状态:

@property
def active(self):
    return self.deleted_on is None
在查询和/或查询中:


谢谢你,斯多兰。我能让它工作。我真的很喜欢您使用日期字段来表示已删除的项目,而不是布尔值。很高兴能够跟踪删除和添加。@Joe J:不客气。是的,在需要之前有这些额外的信息总是很棒的。此外,我经常存储一个deleted_by column以用于审计目的,即使我现在不需要它。
@property
def active(self):
    return self.deleted_on is None
Blog.objects.filter(deleted_on__isnull=True)