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

Так что, похоже, это не работает. Кто-нибудь знает, как я могу создать повторно используемый миксин для общих полей модели, подобных приведенному выше? Есть ли изъян в этом подходе?

Спасибо за помощь, Joe

Обновление: обратите внимание, что некоторые из моих моделей, которые я планирую использовать миксин, используют модель MPTT, поэтому я не могу просто сделать свой TrackingFieldMixin миксином базовым классом и наследовать только от него.

class Post(MPTTModel, TrackingFieldMixin):
    post_name = models....
    post_type = models...
18
задан Joe J 16 May 2011 в 07:37
поделиться