用户的用户名是什么?

时间:2010-03-09 22:26:32

标签: django django-models

在我的一个Django模型中,我重写了save函数。我这样做是为了获取用户的用户名。但这仍然失败。

这就是我所做的:

    def save(self, *args, **kwargs):
    self.slug = slugify('%s' % (self.question))
    if not self.id:
        self.publish_date = datetime.datetime.now()
        self.publisher = self.request.user
    self.modification_date = datetime.datetime.now()
    self.modifier = self.request.user
    super(Faq, self).save(*args, **kwargs) # Call the "real" save() method

这失败了: 'Faq'对象没有属性'request'

感谢。

3 个答案:

答案 0 :(得分:2)

如果这是在管理员应用程序中使用,正如您在答案中所说的那样,那么您根本不应该覆盖模型保存方法。相反,您应该覆盖save_model类的ModelAdmin方法。

查看django.contrib.admin.options中的原始代码 - 您会看到它已经传递了request对象。所以你需要做的就是在那里分配publisher

def save_model(self, request, obj, form, change):
    obj.slug = slugify('%s' % (obj.question))
    if not obj.id:
        obj.publish_date = datetime.datetime.now()
        obj.publisher = request.user
    obj.modification_date = datetime.datetime.now()
    obj.modifier = request.user
    obj.save()

答案 1 :(得分:1)

request仅传递给视图,而不是模型方法,因此您必须在视图中设置publisher

我会从此处删除行self.modifier = self.request.user,并在设置modifier = request.user的同时设置question,我假设您在视图中执行此操作。

然后,您可以将self.publisher = self.request.user更改为self.publisher = self.modifier

希望有所帮助。

答案 2 :(得分:1)

您需要将请求传递给save方法,因为它在该上下文中不会自动存在。

def save(self, request, *args, **kwargs):
    self.slug = slugify('%s' % (self.question))
    if not self.id:
        self.publish_date = datetime.datetime.now()
        self.publisher = request.user
    self.modification_date = datetime.datetime.now()
    self.modifier = self.request.user
    super(Faq, self).save(*args, **kwargs) # Call the "real" save() method

...用法

my_faq = Faq()
my_faq.save(request)