Joe*_*e J 18 django meta inheritance model mixins
我想在项目中的每个模型中添加一些字段.例如,这些字段是"跟踪字段",例如创建日期,更新日期和"活动"标志.我正在尝试创建一个我可以添加到每个模型类的Mixin,它允许我通过多重继承添加这些额外的字段.但是,在创建对象实例时,看起来我通过Mixin添加的模型字段显示为对象的方法而不是数据库字段.
In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
Run Code Online (Sandbox Code Playgroud)
这是我的模型的样子:
from django.db import models
class Blog(models.Model, TrackingFieldMixin):
name = models.CharField(max_length=64)
type = models....
class TrackingFieldsMixin():
active = models.BooleanField(default=True,
help_text=_('Indicates whether or not this object has been deleted.'))
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
所以这似乎不起作用.有谁知道我如何能够为类似于上面的常见模型字段创建可重用的mixin?这种方法有缺陷吗?
谢谢你的帮助,乔
更新:请注意,我计划使用mixin的一些模型使用MPTT模型,因此我不能简单地将我的TrackingFieldMixin混合到基类中并仅从中继承.
class Post(MPTTModel, TrackingFieldMixin):
post_name = models....
post_type = models...
Run Code Online (Sandbox Code Playgroud)
Sam*_*lan 25
抽象模型仍然需要继承model.Model
才能正常工作:
class TrackingFieldsMixin(models.Model):
Run Code Online (Sandbox Code Playgroud)
而不是你active
BooleanField
我会添加一个,deleted_on
DateTimeField
所以你可以记录删除记录的时间.然后,您可以在实例上添加属性以查看它是否处于活动状态:
@property
def active(self):
return self.deleted_on is None
Run Code Online (Sandbox Code Playgroud)
在查询和/或自定义管理器中:
Blog.objects.filter(deleted_on__isnull=True)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5826 次 |
最近记录: |