gpt4 book ai didi

django - 如何从管理 ModelForm 清洁方法访问 request.user?

转载 作者:行者123 更新时间:2023-12-04 20:59:42 24 4
gpt4 key购买 nike

我正在管理 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给定请求对象的函数。

The save_model method is given the HttpRequest, a model instance, a ModelForm instance and a boolean value based on whether it is adding or changing the object. Here you can do any pre- or post-save operations.



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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com