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