Я работаю над концепцией, в которой я хочу получить определенную информацию при сохранении модели. Чтобы понять полную картину, у меня есть ядро приложения со следующей моделью
ядро / 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')
Модель аудита - это тип общего содержимого, в настоящее время я присоединяю его к другим приложениям, таким как в блоге
Блог / 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)
Моя первая попытка состояла в том, чтобы я сделал сигнал post_save, в котором я проверял, прошел ли экземпляр, содержащий атрибут audit_obj, и затем сохранял запись с использованием article.audit_obj.create().save()
.
К сожалению, у меня это не сработало, так как я не могу передать запрос или получить доступ к запросу для получения информации о пользователе.
Итак, я думал создать собственный сигнал и переопределить метод form_save (если он есть), а затем использовать аргументы для передачи объекта запроса, а также объекта модели.
Какой-нибудь совет, как мне это сделать?
С уважением,
РЕДАКТИРОВАТЬ (20 января 2011 г.):
Спасибо @Yuji за потраченное время. Что я пытаюсь сделать, так это сохранить мой код максимально сухим. В конечном итоге, что я хочу сделать, каждый раз, когда я создаю новую модель, я только создаю дополнительный атрибут и называю его aud_obj, и я создам отдельный фрагмент кода, либо сигнал, либо переопределение метода save внутри самого ядра django. Часть кода всегда проверяет, существует ли атрибут со следующим именем, и поэтому создает запись в таблице aduti.