我在管理员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_user
。 https://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/