django发送电子邮件收件人列表

时间:2018-11-27 14:42:44

标签: python django email

我需要在数据库中注册电子邮件并将其发送到已注册的电子邮件,但是我不能。 如果我手动输入电子邮件,它可以毫无问题地发送,但是我需要它来获取在Pessoa中注册的电子邮件,以便在MovRotativo中使用,以便在付款完成后立即发送

错误 “ / sistema / mov-rot-novo /中的TypeError “ Pessoa”类型的对象没有len()”

models.py

from django.db import models
from django.core.mail import send_mail
import math
PAGO_CHOICES = (
('Não', 'Não Pago'),
('Sim', 'Pago')
)

class Pessoa(models.Model):
    nome = models.CharField(max_length=50, blank=False)
    email = models.EmailField(blank=False)
    cpf = models.CharField(max_length=11, unique=True, blank=False)
    endereco = models.CharField(max_length=50)
    numero = models.CharField(max_length=10)
    bairro = models.CharField(max_length=30)
    telefone = models.CharField(max_length=20, blank=False)
    cidade = models.CharField(max_length=20)
    estado = models.CharField(max_length=2, choices=STATE_CHOICES)

    def __str__(self):
        return str(self.nome) + ' - ' + str(self.email) 

class MovRotativo(models.Model):
    checkin = models.DateTimeField(auto_now=False, blank=False, null=False,)
    checkout = models.DateTimeField(auto_now=False, null=True, blank=True)
    email = models.ForeignKey(Pessoa, on_delete=models.CASCADE, blank=False)
    valor_hora = models.DecimalField(
        max_digits=5, decimal_places=2, null=False, blank=False)
    veiculo = models.ForeignKey(
        Veiculo, on_delete=models.CASCADE, null=False, blank=False)
    pago = models.CharField(max_length=15, choices=PAGO_CHOICES)

    def send_email(self):
        if self.pago == 'Sim':

            send_mail(
                'Comprovante pagamento Estacione Aqui 24 Horas',
                'Here is the message.',
                'estacioneaqui24@gmail.com',
                recipient_list=[self.email],
                fail_silently=False,
            )

2 个答案:

答案 0 :(得分:0)

MovRotativo中,email不是EmailField,而是类Pessoa的实例。您需要email中的Pessoa中的email.email

recipient_list=[self.email.email],

答案 1 :(得分:0)

由于电子邮件是 Pessoa ,因此您需要使用对象电子邮件,并且您将其命名为电子邮件。.由于您正在进行联接以获取电子邮件...您需要引用它。请使用 email.email ,因为它希望 Pessoa.email 有所帮助。我还增加了一条额外的行来验证电子邮件是否为空。

class MovRotativo(models.Model):
    checkin = models.DateTimeField(auto_now=False, blank=False, null=False,)
    checkout = models.DateTimeField(auto_now=False, null=True, blank=True)
    email = models.ForeignKey(Pessoa, on_delete=models.CASCADE, blank=False)
    valor_hora = models.DecimalField(
        max_digits=5, decimal_places=2, null=False, blank=False)
    veiculo = models.ForeignKey(
        Veiculo, on_delete=models.CASCADE, null=False, blank=False)
    pago = models.CharField(max_length=15, choices=PAGO_CHOICES)

    def send_email(self):
        if self.pago == 'Sim':
            if email.email:
                send_mail(
                    'Comprovante pagamento Estacione Aqui 24 Horas',
                    'Here is the message.',
                    'estacioneaqui24@gmail.com',
                    recipient_list=[self.email.email],
                    fail_silently=False,
                )