o django preenche automaticamente alguns dados com base no atributo model
Estou trabalhando em um conceito no qual desejo capturar determinadas informações quando um modelo é salvo. Para entender a imagem completa, tenho um núcleo de aplicativo com o seguinte modelo
core / models.py
from django.db import models
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from transmeta import TransMeta
from django.utils.translation import ugettext_lazy as _
import signals
class Audit(models.Model):
## TODO: Document
# Polymorphic model using generic relation through DJANGO content type
operation = models.CharField(_('Operation'), max_length=40)
operation_at = models.DateTimeField(_('Operation At'), auto_now_add=True)
operation_by = models.ForeignKey(User, null=True, blank=True, related_name="%(app_label)s_%(class)s_y+")
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
O modelo de auditoria é um tipo de conteúdo genérico. No momento, estou anexando-o a outros aplicativos, como no blog
blog / models.py
from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _
# Create your models here.
class Meta:
verbose_name_plural = "Categories"
class article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(editable=False, unique_for_year=True)
content = models.TextField()
is_active = models.BooleanField()
published_at = models.DateTimeField('Publish at',auto_now=True)
related_articles = models.ManyToManyField('self', null=True, blank=True)
audit_obj = generic.GenericRelation('core.Audit', editable=False, null=True, blank=True)
Minha primeira tentativa foi: fiz um sinal post_save no qual estava verificando se a instância passou contendo o atributo audit_obj e salvando um registro usandoarticle.audit_obj.create().save()
.
Infelizmente, isso não funcionou totalmente para mim, pois não consigo passar a solicitação nem acessar a solicitação para recuperar as informações do usuário.
Então, eu estava pensando em criar um sinal personalizado e substituir o método form_save (se houver) e depois usar argumentos para passar o objeto de solicitação e o modelo.
Algum conselho sobre como eu posso fazer isso?
Saudações,
EDIT (20 de janeiro de 2011):
Obrigado @Yuji pelo seu tempo. Bem, o que estou tentando alcançar é manter meu código o mais seco possível. Em última análise, o que eu quero fazer sempre que criar um novo modelo, criarei apenas um atributo adicional e o nomeio audit_obj e criarei um único pedaço de código, como um sinal ou para substituir o método save dentro do próprio núcleo do django. A parte do código sempre verifica se existe um atributo com o seguinte nome e, portanto, cria um registro na tabela aduti.