我在管理员ModelForm上做一些“干净”的事情:

class MyAdminForm(forms.ModelForm):
    def clean(self):
        # Some stuff happens...
        request.user.message_set.create(message="Some stuff happened")

class MyAdmin(admin.ModelAdmin):
    form = MyAdminForm

除了threadlocals hack-我如何访问request.user设置消息?我不能将其传递给表单构造函数,因为不会从我的代码中调用它。

最佳答案

在不将用户传递到表单构造函数的情况下,您无法在表单上执行此操作。相反,您可以使用为请求对象提供的ModelAdmin.save_model函数。



http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model

编辑:
由于您希望将逻辑/消息放入clean函数中,因此可以执行以下操作:

class MyAdminForm(forms.ModelForm):
    user_messages = []
    def clean(self):
        # Some stuff happens...
        user_messages.append("Some stuff happened")

class MyAdmin(admin.ModelAdmin):
    form = MyAdminForm
    def save_model(self, request, obj, form, change):
        for message in form.user_messages:
            request.user.message_set.create(message=message)

很晚编辑:
user.message_set设置为在Django 1.4中已弃用。您应该改用ModelAdmin.message_userhttps://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.message_user

关于django - 如何从管理员ModelForm清理方法访问request.user?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2252128/

10-13 08:31