【问题标题】:Send mail from django form wizard从 django 表单向导发送邮件
【发布时间】:2016-01-19 09:53:20
【问题描述】:

我有任何模型和视图来生成表单向导,一旦用户提交最后一个表单,我希望应用程序发送确认电子邮件,当前用户的邮件是原生 Django 模型,我如何访问他的电子邮件?以及我如何也可以访问“curso”名称?感谢您的帮助。

models.py

class Datos_Basicos (models.Model):
    user = models.OneToOneField(User)
    tipo_identificacion = models.CharField(max_length=25)
    identificacion = models.CharField(max_length=20,primary_key='True')
    telefono = models.CharField(max_length=10)
    celular = models.CharField(max_length=11)

class Curso(models.Model):
    curso = models.CharField(max_length=15)
    fk_programa = models.ForeignKey(Programa, verbose_name="programa")

class Inscripcion(models.Model):
    fecha = models.DateField(default = datetime.datetime.now)
    fk_subsede = models.ForeignKey(Subsede, verbose_name="sede")
    fk_curso = models.ForeignKey(Curso, verbose_name="curso")

class Inscrito(models.Model):
    fk_datos_basicos = models.OneToOneField(Datos_Basicos, verbose_name="datos basicos")        
    fk_inscripcion = models.OneToOneField(Inscripcion, verbose_name="curso", null=False)

forms.py

class Datos_basicos_form(forms.ModelForm):
      tipo_identificacion = forms.ChoiceField(choices=IDENTIFICACION_CHOICES)

   class Meta:
    model = Datos_Basicos
    fields = ['tipo_identificacion', 'identificacion', 'telefono', 'celular'] 


class Inscrito_form(forms.Form):
    genero = forms.ChoiceField(choices=GENEROS_CHOICES)
    fecha_nacimiento = forms.DateField(widget=extras.SelectDateWidget(years=ANIOS_CHOICES))
    grupo_etnico = forms.ChoiceField(choices=GRUPO_ETNICO_CHOICES)
    condicion = forms.ModelChoiceField(queryset=Condicion.objects.all())
    condicion_medica = forms.CharField(max_length=200)
    eps = forms.CharField(max_length=100)
    espacio_geografico = forms.ChoiceField(choices=ESPACIO_GEOGRAFICO_CHOICES)
    barrio = forms.ModelChoiceField(queryset=Barrio.objects.order_by('barrio'))
    direccion = forms.CharField(max_length=50)
    jornada_estudio = forms.ChoiceField(choices=JORNADA_ESTUDIO_CHOICES)


class Inscripcion_form(forms.ModelForm):
    class Meta:
        model = Inscripcion
        exclude = ['fecha']

views.py

from formtools.wizard.views import SessionWizardView

class InscritoWizard(SessionWizardView):
    template_name = "inscripcion.html"


    def done(self, form_list, **kwargs):
        forms_data = self.process_form_data(form_list)
        forms_data[1]['user'] = self.request.user ### current user
        forms_data[2]['edad'] = hoy.year - forms_data[2]['fecha_nacimiento'].year - ((hoy.month, hoy.day) < (forms_data[2]['fecha_nacimiento'].month, forms_data[2]['fecha_nacimiento'].day))
        inscripcion = Inscripcion.objects.create(**forms_data[0])
        datos_basicos = Datos_Basicos.objects.create(**forms_data[1])
        forms_data[2]['fk_datos_basicos'] = datos_basicos
        forms_data[2]['fk_inscripcion'] = inscripcion
        Inscrito.objects.create(**forms_data[2])
    --->send_mail('Subject here', 'Here is the message.','from@example.com',['to@example.com'], fail_silently=False)
        return render_to_response('gracias.html', {'forms_data': forms_data})

    def process_form_data(self, form_list):
        data = [form.cleaned_data for form in form_list]
        return data

【问题讨论】:

    标签: python django forms email wizard


    【解决方案1】:

    在表单向导方法中,您可以使用self.request.user 访问已登录的用户,因此您可以使用self.request.user.email 获取他们的电子邮件。

    【讨论】:

    • 嘿,谢谢,我如何从其他模型访问对象,例如“Curso”模型有一个属性“curso”,它是“Inscripcion”模型中的一个 fk,我正在尝试 forms_data[2 ]['fk_inscripcion'].fk_curso.curso,我无法理解如何访问对象。
    • 对不起,我不明白你的forms_data 的结构,因为它很复杂。你还没有展示你的表格是什么。 forms_data[2]['fk_inscripcion'] 是什么?它是模型实例还是主键?
    • forms_data 是从提交此表达式的表单数据创建的对象的字典:forms_data[2] 引用有问题的表单,在这种情况下:forms_data[2] 类似于:{'fk_inscripcion', 'date','other','bla bla' },所以我可以通过以下方式访问“date”:forms_data[2]['date']。但我需要访问一个可以通过“fk_inscripcion”访问的对象。
    • 如前所述,forms_data[2]['fk_inscripcion'] 的值是多少?它是模型实例,还是主键?
    • forms_data[2]['fk_inscripcion'] 是主键
    猜你喜欢
    • 2019-11-17
    • 2016-03-02
    • 2019-07-31
    • 2016-01-12
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多