Tengo algunos campos que quiero agregar a la mayoría de los modelos de mi proyecto. Por ejemplo, estos campos son "campos de seguimiento", como una fecha de creación, una fecha de actualización y un indicador "activo". Estoy intentando crear un Mixin que podría agregar a cada clase de modelo que me permita agregar estos campos adicionales a través de herencia múltiple. Sin embargo, cuando se crea una instancia de objeto, parece que los campos de mi modelo que se agregaron a través de Mixin aparecen como métodos del objeto en lugar de los campos de la base de datos.Django: Creación de Mixin para campos de modelo reutilizables
In [18]: Blog.objects.all()[0].created
Out[18]: <django.db.models.fields.DateTimeField object at 0x10190efd0>
Esto es lo que mis modelos se parecen:
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
Así que esto no parece funcionar. ¿Alguien sabe cómo puedo crear una mezcla reutilizable para campos de modelos comunes similar a la anterior? ¿Hay algún defecto en este enfoque?
Gracias por su ayuda, Joe
Actualización: Tenga en cuenta que algunos de mis modelos que va a utilizar el mixin en uso el modelo MPTT, por lo que no pueden simplemente hacer mi TrackingFieldMixin mixin la clase base y heredar solo de ella.
modelosclass Post(MPTTModel, TrackingFieldMixin):
post_name = models....
post_type = models...
Gracias Sdolan. Pude hacer que funcionara. Me gusta mucho el uso del campo de fecha para los elementos eliminados en lugar del booleano. Es bueno poder hacer un seguimiento de las eliminaciones y de las adiciones. –
@Joe J: De nada. Y sí, siempre es bueno tener esa información adicional antes de que sea necesaria. Además, a menudo almaceno una columna deleted_by para fines de auditoría, incluso si no la necesitaré de inmediato. – sdolan