Django auto preenchendo alguns dados com base no atributo do modelo

Estou trabalhando em um conceito em que eu quero capturar certas informações quando um modelo é salvo. Para entender a imagem completa, tenho um núcleo de aplicativo com o modelo a seguir

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, é anexado 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, eu fiz um post_save sinal em que eu estava verificando se a instância passou contendo o atributo audit_obj e, em seguida, salvando um registro usando article.audit_obj.create().save() .

Infelizmente, isso não funcionou inteiramente para mim, pois não posso passar a solicitação nem posso acessar a solicitação para recuperar as informações do usuário.

Então, eu estava pensando em criar um sinal personalizado e replace o método form_save (se houver tal coisa) e, em seguida, usando argumentos para passar o object de solicitação, bem como o object de modelo.

Algum conselho sobre como 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 como DRY quanto possível. O que eu quero fazer, no final das contas, toda vez que eu criar um novo modelo, vou criar apenas um atributo adicional e nomeá-lo como audit_obj e criarei uma única parte do código, um sinal ou para replace o método save dentro do próprio core do django. A parte do código sempre verificará se existe um atributo com o seguinte nome e, portanto, criará um registro na tabela aduti.

Acabei de criar uma function na minha class de modelo ou gerente e chamá-lo do meu formulário salvar (onde quer que possa ser)

 class AuditManager(models.Manager): def save_from_object(self, request, obj): audit = Audit() audit.object_id = obj.id audit.operation_by = request.user # ... audit.save() 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') objects = AuditManager() class MyBlogForm(forms.ModelForm): class Meta: model = article # btw I'd use Capital Letters For Classes def save(self, *args, **kwargs): super(MyBlogForm, self).save(*args, **kwargs) Audit.objects.save_from_object(request, self.instance)