0

I've defined a model as follows (Shortened it for the question)

from datetime import datetime, date, timedelta

class Case(models.Model):
    received_email_sent = models.DateTimeField(null=True, blank=True, default=None)

    def send_received_email(self):
        message = settings.EMAIL_HEADER + self.case_received_email() + settings.EMAIL_FOOTER
        send_mail('Subject here', message, settings.EMAIL_HOST_USER, ['xxx@xxx.com'], fail_silently=False)
        self.received_email_sent = datetime.now()

and in the view I call send_received_email on an existing object. I know that the send_received_email block is being entered because I'm receiving the emails every time I test this out, but the self.received_email_sent = datetime.now() part is leaving that field as its default value (None) every time. Here's the relevant part of the view:

from logbook.models import Case

def job_email(request, case_id):
    case = get_object_or_404(Case,pk=case_id)
    case.send_received_email()
    return HttpResponseRedirect('/jobs/'+str(case.case_id))

I have also tried an alternative method, where saving the field is done in the view instead of the model, like so:

models:

class Case(models.Model):
    received_email_sent = models.DateTimeField(null=True, blank=True, default=None)
    def send_received_email(self):
        message = settings.EMAIL_HEADER + self.case_received_email() + settings.EMAIL_FOOTER
        send_mail('Subject here', message, settings.EMAIL_HOST_USER, ['xxx@xxx.com'], fail_silently=False)
        #self.received_email_sent = datetime.now()

views:

from datetime import datetime
from logbook.models import Case

def job_email(request, case_id):
    case = get_object_or_404(Case,pk=case_id)
    case.send_received_email()
    case.received_email_sent = datetime.now()
    return HttpResponseRedirect('/jobs/'+str(case.case_id))

I have also tried both of the above routes with various tweaks like removing the brackets on now() and changing from datetime import datetime to just import datetime. No joy. Thanks for having a look at this.

Ruzzy
  • 67
  • 6

1 Answers1

2

You need to call self.save() at the end of send_received_email().

Rod Xavier
  • 3,983
  • 1
  • 29
  • 41
  • Thanks. This is working for me now but only on Django's development server. When running with apache2, it sends the email and doesn't save the datetime. – Ruzzy Apr 14 '15 at 01:42
  • Have you updated your prod server? Tried reloading or restarting apache? – Rod Xavier Apr 14 '15 at 01:55
  • I was using reload before but a restart did it. Why did this work? Does apache not run the python code as is? – Ruzzy Apr 14 '15 at 02:11
  • 1
    Maybe this link could help you. http://stackoverflow.com/questions/4206000/django-apache-mod-wsgi-having-to-restart-apache-after-changes – Rod Xavier Apr 14 '15 at 02:13