17
我有幾個字段,我想添加到我的項目中的大多數每個模型。例如,這些字段是「跟蹤字段」,例如創建日期,更新日期和「活動」標誌。我試圖創建一個Mixin,我可以將它添加到每個模型類中,以允許我通過多重繼承添加這些額外的字段。但是,創建對象實例時,似乎通過Mixin添加的模型字段顯示爲對象的方法而不是數據庫字段。Django:爲可重用模型字段創建Mixin
In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
這裏是我的模型是這樣的:
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
因此,這似乎並沒有工作。有誰知道我如何能夠爲類似於上面的常見模型字段創建可重用的mixin?這種方法有缺陷嗎?
感謝您的幫助, 喬
更新:請注意,我的一些模型,我打算使用在使用混入了MPTT模型,所以我不能只是讓我TrackingFieldMixin混入的基類,只從它繼承。
class Post(MPTTModel, TrackingFieldMixin):
post_name = models....
post_type = models...
謝謝Sdolan。我能夠得到它的工作。我真的很喜歡你使用日期字段刪除項目,而不是布爾值。很好能夠跟蹤刪除和添加。 – 2011-05-16 14:53:46
@Joe J:你很受歡迎。是的,在需要之前獲得額外的信息總是很棒的。另外,爲了審計目的,我經常存儲一個deleted_by列,即使我不會馬上需要它。 – sdolan 2011-05-16 22:48:20