2015-10-20 72 views
0

我有任何模型和視圖來生成表單嚮導,一旦用戶提交了最後一個表單,我想讓應用發送一封確認郵件,當前用戶的郵件是在本地Django模型中,我如何訪問他的電子郵件?以及我如何訪問「curso」名稱?謝謝你的幫助。從django表單嚮導發送郵件

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.','[email protected]',['[email protected]'], 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 

回答

2

在形式嚮導方法,您可以通過self.request.user訪問已登錄的用戶,因此您可以通過self.request.user.email獲得他們的電子郵件。

+0

嘿,謝謝,我怎樣才能訪問其他模型的對象,例如「Curso」模型有一個屬性「curso」,它是在「Inscripcion」模型中的一個fk,我嘗試了forms_data [2] ['fk_inscripcion '] .fk_curso.curso,我無法理解我如何訪問對象。 –

+0

對不起,我不明白'forms_data'的結構,因爲它非常複雜。你沒有顯示你的表格。什麼是'forms_data [2] ['fk_inscripcion']' - 它是模型實例還是主鍵? – Alasdair

+0

forms_data是一個從表單數據創建的對象的字典提交此表達式:forms_data [2]在這種情況下,受到問題的形式:forms_data [2]是這樣的:{'fk_inscripcion','date','other' ,'bla bla'},所以我可以通過這種方式訪問​​「date」:forms_data [2] ['date']。但是我需要訪問一個可以通過「fk_inscripcion」訪問的對象。 –