And*_*ker 5 django django-forms django-admin
我正在管理ModelForm上的'clean'做一些事情:
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
Run Code Online (Sandbox Code Playgroud)
除了threadlocals hack之外 - 我如何访问request.user来设置消息?我无法将其传递给表单构造函数,因为不会从我的代码中调用它.
如果不将用户传递到表单构造函数中,则无法在表单上执行此操作。相反,您可以使用ModelAdmin.save_model给定请求对象的函数。
save_model 方法被赋予 HttpRequest、模型实例、ModelForm 实例和一个基于是否添加或更改对象的布尔值。您可以在此处执行任何保存前或保存后操作。
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)
Run Code Online (Sandbox Code Playgroud)
很晚的编辑:
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
| 归档时间: |
|
| 查看次数: |
3175 次 |
| 最近记录: |