Django GenericView更新--保存表单时发送电子邮件--如何更新?
我有这个UpdateView子类Django GenericView更新--保存表单时发送电子邮件--如何更新?,django,django-views,Django,Django Views,我有这个UpdateView子类 class UpdateShipView(UpdateView): form_class = CruiseShipForm template_name = 'cruise/ship_form.html' success_url = 'cruise/ships' def get_object(self, queryset=None): obj = CruiseShip.objects.get(pk=self.kwa
class UpdateShipView(UpdateView):
form_class = CruiseShipForm
template_name = 'cruise/ship_form.html'
success_url = 'cruise/ships'
def get_object(self, queryset=None):
obj = CruiseShip.objects.get(pk=self.kwargs['ship_id'])
return obj
我想用以下代码向某些人发送电子邮件:
def form_valid():
msg = 'bla bla'
send_mail('Cruise Ship change: ', msg, 'offer_entry@ensembletravel.com',
user_emails, fail_silently=False)
return super(UpdateShipView, self).form_valid()
我得到这个错误:
Django Version: 1.3.1
Exception Type: TypeError
Exception Value: form_valid() takes no arguments (2 given)
我认为我需要重新编写form_valid()方法,但目前我还没有看到一个示例来指导我UpdateView对象的form_valid方法必须有参数“form”。此方法的定义必须为:
def form_valid(self, form):
....
我想继续我最后的工作
import django.contrib.auth as auth
from django.core.mail import send_mail
def form_valid(self, form):
group = auth.models.Group.objects.get(name='cruise')
users = group.user_set.all()
user_emails = []
for u in users:
user_emails.append(u.email)
print u.username, u.email
cruise_ship = self.get_object()
msg = "%s (%d) has changed."% (cruise_ship.name, cruise_ship.shipid)
msg += "\nYou can review it here: http://localhost:8000/cruise/ships/%d/" % cruise_ship.shipid
# print user_emails #for debug
send_mail('Cruise Ship change: ' + cruise_ship.name, msg, 'offer_entry@ensembletravel.com',
user_emails, fail_silently=False)
#context = super(PublisherDetailView, self).get_context_data(**kwargs)
return super(UpdateShipView, self).form_valid(form)
感谢@kosmos343,我更改了我的表单\u valid def,但是我如何正确地称父表单\u valid?这段代码是否只有在表单实际验证时才运行?或者form_valid()检查是否为form_valid,当form有效时调用,当form无效时调用form_invalid方法。您不能调用父窗体\u valid,您可以从源django/views/generic/edit.py输入更多信息