У меня есть несколько полей, которые я хочу добавить к большинству каждой модели в моем проекте. Например, эти поля являются "полями отслеживания", такими как дата создания, дата обновления и "активный" флаг. Я пытаюсь создать Mixin, который я мог бы добавить к каждому классу модели, что позволило бы мне добавить эти дополнительные поля через множественное наследование. Однако, когда экземпляр объекта создается, кажется, что мои поля модели, которые были добавлены через 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 для общих полей модели, похожих на выше? Есть ли недостаток в этом подходе?
Спасибо за помощь, Джо
Обновление: обратите внимание, что некоторые из моих моделей, в которых я планирую использовать mixin, используют модель MPTT, поэтому я не могу просто заставить my TrackingFieldMixin смешивать базовый класс и наследовать только от него.
class Post(MPTTModel, TrackingFieldMixin):
post_name = models....
post_type = models...