Обновление Django GenericView - отправка электронной почты, если форма сохранена - как? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть этот подкласс 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.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 (), но на данный момент я не видел примера, который бы мне помог

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Я хотел продолжить то, что я наконец получил на работу.

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)
0 голосов
/ 24 февраля 2012

Метод form_valid объекта UpdateView должен иметь аргументы «form».Определение этого метода должно быть:

def form_valid(self, form):
    ....
...