Вы не можете сделать это в форме, не передавая пользователя в конструктор формы. Вместо этого вы можете использовать функцию ModelAdmin.save_model
, которой задан объект запроса.
Метод save_model дается HttpRequest, экземпляр модели, а ModelForm экземпляр и логическое значение, основанное на ли это добавление или изменение объекта. Здесь вы можете сделать любые операции до или после сохранения.
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model
Edit: Поскольку вы хотите поместить логику/сообщения в чистой функции вы могли бы сделать что-то вроде:
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
Mmmmm. Сообщение зависит от некоторой логики проверки, поэтому гораздо полезнее жить в методе pureForm Model(). Если я переведу его в ModelAdmin save_model(), мне нужно будет написать какую-то грязную логику только ради отправки сообщения! –
Справедливая точка. Проверьте мое редактирование и посмотрите, помогло ли это. –
Я переместил user_messages в init и добавил self. к строке 'user_messages.append', и это сработало! Благодарю. –