モデル保存時に特定の情報をキャプチャするコンセプトに取り組んでいます。全体像を理解するために、私はモデルの属性に基づいていくつかのデータを自動入力する
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でアプリのコアを持っています
ブログ/ 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)
、私はインスタンスがaudit_obj属性を含む渡された場合、私がチェックされたpost_save信号を作った私の最初の試みarticle.audit_obj.create().save()
を使用してレコードを保存します。
残念ながら、私は要求を受け入れることができず、ユーザー情報を取得する要求にもアクセスできないため、これは完全にうまくいかなかった。
私はカスタム信号を作成し、form_saveメソッドをオーバーライドして(そのようなことがある場合)、引数を使用してリクエストオブジェクトとモデルオブジェクトを渡すことを考えていました。
どのように私はそれを行うことができますか?
よろしく、
EDIT(月、2011年の第20回):
おかげ@Yujiお時間のために。さて、達成しようとしているのは、コードをできるだけDRYに保つことです。最終的に私が最終的にしたいのは、新しいモデルを作成するたびに、追加の属性を作成してaudit_objという名前を付け、信号か、またはdjangoコア自体のsaveメソッドをオーバーライドするコードを作成します。コードの一部は、次の名前の属性が存在するかどうかを常にチェックし、したがってadutiテーブルにレコードを作成します。
のMo J.ねえ、私が同様にグーグルたことを絶対に奇妙ですあなたの元の投稿を読んでいた(別のSOの質問)、リンクをクリックして、私の名前を投稿で読んでいました。それはあなたのために働いていることを願っています! –