Py学习  »  Django

求助:关于 Model 模型插入时触发事件的问题

呆滞的慢板 • 11 年前 • 6911 次点击  

现在我定义了一个这样的模型对象:

from django.db import models
from django.contrib import auth
from django.contrib.auth.models import User

class Entity(models.Model):

    create_user = models.ForeignKey(User, related_name='created_entities')
    create_date = models.DateTimeField()
    modify_user = models.ForeignKey(User, related_name='modified_entities')
    modify_date = models.DateTimeField()

然后呢,我想在 Entity 类创建行的时候自动设定 create_user 和 create_date,在 update 的时候自动修改 modify_user 和 modify_date,如何才能实现呢?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/381
 
6911 次点击  
文章 [ 6 ]  |  最新文章 11 年前
Py站长
Reply   •   1 楼
Py站长    11 年前

@呆滞的慢板 看了一下,方法是正确的。不过有一个问题说的不对。不需要重启Web,ThreadLocal是线程的,只覆盖一次请求,请求断掉后,数据也就丢失了。

呆滞的慢板
Reply   •   2 楼
呆滞的慢板    11 年前

谢谢版主,我找到了这个,今晚回去试试: http://blog.csdn.net/huyoo/article/details/3646361

Py站长
Reply   •   3 楼
Py站长    11 年前

@呆滞的慢板 想法挺好,不过 当前登录者在 用户请求的request里面。

一个比较直接的做法是,每次请求都将 request.user 保存到共用的数据结构里(当然是用拦截器来做),然后你在其它地方就可以使用了。注意,如果用户没有登录的情况。

呆滞的慢板
Reply   •   4 楼
呆滞的慢板    11 年前

但是我不知道如何在 models.py 里面获取到当前的用户(貌似只有 request 里面有),但是这个 request 又不像是 php 里面作为一个全局变量存在,那么如何获取到当前登录的 user 的句柄呢?request 可以,但如果是,request 又哪里找呢?

呆滞的慢板
Reply   •   5 楼
呆滞的慢板    11 年前

嗯,现在我重载 models.Model 基类的 save 方法,然后

def save(self, force_insert=False, force_update=False, using=None,
         update_fields=None):

    user = User.objects.get() # 这里如何在 model 里面获取到当前登录用户呢

    # 如果是新建,记录 create_user。
    if not self.create_user: self.create_user = user

    # 每次保存都记录 modify_user。
    self.modify_user = user

    # 最后调用基类的 save。
    print('保存方法被调用。')
    models.Model.save(self, force_insert, force_update, using, update_fields)
Py站长
Reply   •   6 楼
Py站长    11 年前

写个函数封装这些操作,你还需要传入当前操作者是谁呢