Django рдореЗрдВ рдЬрдЯрд┐рд▓ рд░реВрдк

рдЫрд╡рд┐
рд╢реБрдн рджреЛрдкрд╣рд░ рдореИрдВ Django рдореЗрдВ рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╕рдм рддрдм рд╢реБрд░реВ рд╣реБрдЖ рдЬрдм рдореЗрд░реЗ рдбрд┐рдкреНрд▓реЛрдорд╛ рдХреЛ рдПрдХ рдРрд╕рд╛ рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдлреЙрд░реНрдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд░реВрдк рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЙрди рджреЛрдиреЛрдВ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдкреБрд░рд╛рдиреЗ рд╕реЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ, рдпрд╣ рдмрд╣реБрдд рдмреЗрд╡рдХреВрдл рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рдордп рдореЗрдВ Django рдореЗрдВ FormWizard рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рдж рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ рдЗрд╕рд▓рд┐рдП рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред Django рдмреЗрд╢рдХ MVC рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдореЙрдбрд▓рдлрд╛рд░реНрдо рдФрд░ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рджреЗрдЦреЗрдВ, рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗред


class Citizenship(models.Model): name = models.CharField(max_length = 50,verbose_name = u'') class CertificateType(models.Model): name = models.CharField(max_length = 50,verbose_name = u'') class Student(models.Model): SEX_CHOICES = ( ('m',u""), ('w',u""), ) sex = models.CharField(max_length=1,verbose_name=u"",choices=SEX_CHOICES) citizenship = models.ForeignKey(Citizenship, verbose_name = u"") doc = models.CharField(max_length = 240,verbose_name = u"doc") student_document_type = models.ForeignKey(CertificateType, related_name = 'student_document',verbose_name = u" ") parent_document_type = models.ForeignKey(CertificateType, related_name = 'parent_document', verbose_name = u" ") def __unicode__(self): try: return unicode(self.fiochange_set.latest('event_date').fio) except FioChange.DoesNotExist: return u'No name' class Contract(models.Model): student = models.ForeignKey(Student,verbose_name = u'') number = models.CharField(max_length=24,verbose_name = u" ") student_home_phone = models.CharField(max_length = 180, verbose_name = u"  ") class FioChange(models.Model): event_date = models.DateField(verbose_name = u'  ', null = True, blank = True) student = models.ForeignKey(Student,verbose_name = u"") fio = models.CharField(max_length = 120, verbose_name = u"") def __unicode__(self): return unicode(self.fio) 


рдЕрдм рдмрд┐рдВрджреБ рдХреЗ рдХрд░реАрдм, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд░реВрдкреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдкреНрд░рдкрддреНрд░ (рдлрд╝реЙрд░реНрдорд╣реЛрдо)


 class NameModelChoiceField(forms.ModelChoiceField): def label_from_instance(self, obj): return "%s"%obj.name class StudentForm(forms.Form): SEX_CHOICES = ( ('m',u""), ('w',u""), ) sex = forms.ChoiceField(label=u'', choices = SEX_CHOICES) citizenship = NameModelChoiceField(label = u'',queryset = Citizenship.objects.order_by('-name'),initial = Citizenship.objects.get(id=1)) doc = forms.CharField(label = u'',max_length = 50) student_document_type = NameModelChoiceField(label = u' ', queryset = CertificateType.objects.order_by('-name'),initial = CertificateType.objects.get(id = 1)) parent_document_type = NameModelChoiceField(label = u' ', queryset = CertificateType.objects.order_by('-name'), initial = CertificateType.objects.get(id = 1)) event_date = forms.DateTimeField(required = False, label = u' : ', initial = datetime.date.today,help_text = u' ') fio = forms.CharField(label = u' ', max_length = 60) class ContractForm(forms.Form): number = forms.CharField(label = u' ', max_length = 5) phone = forms.CharField(label = u'  ', max_length = 7) 

рджреЛ рд░реВрдк: рдПрдХ рдЫрд╛рддреНрд░ рдбреЗрдЯрд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдЫрд╛рддреНрд░ рдЕрдиреБрдмрдВрдз рдбреЗрдЯрд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡реЗ 1: рдПрди рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЕрд░реНрдерд╛рдд 1 рдЫрд╛рддреНрд░ рдХреЗ рдкрд╛рд╕ рдПрди рдЕрдиреБрдмрдВрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЫрд╛рддреНрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдмрдВрдз рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ рдлреЙрд░реНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЪрд▓реЛ рдРрд╕рд╛ рдХрд╣рддреЗ рд╣реИрдВ)ред рддреБрд░рдВрдд рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреАрдЦ рдорд╛рдБрдЧрддрд╛ рд╣реИ:

 class AddStudentForm(StudentForm,ContractForm): pass 


рд▓реЗрдХрд┐рди рдпрд╣ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде, рд╕рднреА рдЫрд╛рддреНрд░-рдЫрд╛рддреНрд░рд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯрдлреЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдирд╛рдореЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдорд╛рди рд░реВрдкреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЫрд╛рддреНрд░рд╛рд╡рд╛рд╕ рд╡рд░реНрдЧ)ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ SessionWizardView рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЪрд░рдг рджрд░ рдЪрд░рдг рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдордзреНрдпрд╡рд░реНрддреА рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ - рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рд░реВрдкреЛрдВ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рдиреНрдпрддрд╛ рдХреЛ рдирд╣реАрдВ рдЦреЛрддрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ django рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рдереЗ рд╡реЗ рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдо рддреМрд░ рдкрд░ рдЕрд╕реНрдерд┐рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдирд╣реАрдВ, рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рддреЛ, рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╣рдореЗрдВ 2 рд░реВрдкреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рднреА рд░реВрдкреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЫрд╛рддреНрд░ рдФрд░ рдЙрд╕рдХреЗ рдЕрдиреБрдмрдВрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рдПрдВ рдФрд░, рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ, рдЕрдЧрд▓реЗ рдлрд╝реЙрд░реНрдо рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ рдХрд┐ рдкрд┐рдЫрд▓рд╛ рдПрдХ рд╕рд╣реА рд░реВрдк рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рджреГрд╢реНрдп рд░реВрдкреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЬрдм рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкреНрд░рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдЕрдорд╛рдиреНрдп рд░реВрдк рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред

рджреЗрдЦреЗрдВ (рджреЗрдЦреЗрдВ)



 FORMS = [ ("student", StudentForm), ("contract", ContractForm) ] TEMPLATES = { "student" : "student.html", "contract" : "contract.html" } class AddStudentWizard(SessionWizardView): def get_template_names(self): return [TEMPLATES[self.steps.current]] def get_context_data(self, form, **kwargs): context = super(AddStudentWizard, self).get_context_data(form=form, **kwargs) if self.steps.current == 'contract': context.update({'ok': 'True'}) return context def done(self, form_list, **kwargs): student_form = form_list[0].cleaned_data contract_form = form_list[1].cleaned_data s = Student.objects.create( sex = student_form['sex'], citizenship = student_form['citizenship'], doc = student_form['doc'], student_document_type = student_form['student_document_type'], parent_document_type = student_form['parent_document_type'] ) f = FioChange.objects.create( student = s, event_date = student_form['event_date'], fio = student_form['fio'] ) c = Contract.objects.create( student = s, number = contract_form['number'], student_home_phone = contract_form['phone'] ) return HttpResponseRedirect(reverse('liststudent')) 


 FORMS = [ ("student", StudentForm), ("contract", ContractForm) ] 


рдпрд╣ рдХреЗрд╡рд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд░реВрдкреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ; рдпрджрд┐ рдЖрдк [StudentForm, ContractForm] рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдкрддреНрд░ рдХреБрдВрдЬреА '0' рдпрд╛ '1' рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдЧрд╛ред

 TEMPLATES = { "student" : "student.html", "contract" : "contract.html" } 


рдХреБрдВрдЬреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд╛рдЧрд▓ рд╣реВрдВ рдФрд░ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ (рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдкрд░ рдЬрд╛рдПрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред

 def get_template_names(self): return [TEMPLATES[self.steps.current]] 


рдпрд╣ рд╣рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдпрд╛ рдлрд╝реЙрд░реНрдо рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, self.steps рдореЗрдВ рд╣рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рддреЗ рд╣реИрдВ, рдкреНрд░рдкрддреНрд░ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ self.steps.current "рдЫрд╛рддреНрд░" рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рд╣рдо FORMS рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдпрд╣ '0' рдкрд░ рд▓реМрдЯреЗрдЧрд╛ред

 def get_context_data(self, form, **kwargs): context = super(AddStudentWizard, self).get_context_data(form=form, **kwargs) if self.steps.current == 'contract': context.update({'ok': 'True'}) return context 


рдпрд╣ рд╣рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдХрд╛ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдореЗрдВ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд┐рдЫрд▓рд╛ рдлрд╝реЙрд░реНрдо рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд░рд╛ рдЧрдпрд╛ рд╣реИ, рдЪрд▓реЛ рдорд╛рди рдХреЗ рд╕рд╛рде рдЕрдиреБрдмрдВрдз рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░рдХ рдХрд░реЗрдВред рд╣рд╛рдВ, рдУрдХреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдЯреНрд░реВ' рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рдмрд╛рд░ рдЯреНрд░реВ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдиреЛ рдСрдкреНрд╢рди рдХреЗ рд╕рд╛рде рдмреВрд▓реЗрдирд┐рдпрди, рдЖрджрд┐, рдЗрд╕рд▓рд┐рдП рдЕрдм рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдорд┐рд▓рд╛рди рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦрддрд╛ рд╣реВрдВред

 def done(self, form_list, **kwargs) 


рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рднреА рдлреЙрд░реНрдо рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдореЗрдВ рд╕рд╣реА рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрдЧреЗ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреЛ рд╣рдо рдпрд╣рд╛рдВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЫрд╛рддреНрд░, рдЙрд╕рдХрд╛ рдирд╛рдо рдФрд░ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдПрдВред рдФрд░ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред рдЕрдм рд╣рдо рд░реВрдкреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред

base.html


 <!DOCTYPE html> {% load static %} <html> <head> <script type="text/javascript" src="{% static 'bootstrap/js/jquery.js'%}"></script> <link href="{% static 'bootstrap/css/bootstrap.css'%}" rel="stylesheet"> <script type="text/javascript" src="{% static 'bootstrap/js/bootstrap.js'%}"></script> <style type="text/css"> #main-conteiter { padding-top: 5%; } </style> {% block head %} <title>{% block title %}Example Wizard{% endblock %}</title> {% endblock %} </head> <body> <div class="container" id="main-conteiner"> {% block content %} <!-- body --> {% endblock %} </div> </body> </html> 


рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдБ рдХреБрдЫ рдкреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рд╣рдо рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

wizard_template.html


 {% extends "base.html" %} {% block head %} {{ block.super }} {{ wizard.form.media }} {% endblock %} {% block content %} <p class="text-info"> ,  {{ wizard.steps.step1 }}  {{ wizard.steps.count }}</p> <h3>{% block title_wizard %}{% endblock %}</h3> <form class="well form-horizontal" action="." method="POST">{% csrf_token %} {{ wizard.management_form }} <div class="control-group"> {% block form_wizard %} {% endblock %} </div> <div class="form-actions" style="padding-left: 50%"> {% block button_wizard %} {% endblock %} </div> </form> {% endblock %} 


Wizard.management_form рдХреЛ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рдмрд╛рдд рдХреЛ рд╣рдореЗрд╢рд╛ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╡реНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред

 <div class="control-group"> 

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 <div class="form-actions" style="padding-left: 50%"> 

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╣реИрдВред рд╣рд╛рдВ, рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╢реИрд▓реА рдХреЛ рдпрд╣рд╛рдВ рдЕрдЯрдХрд╛ рджрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред
рдЪрд▓реЛ рдЫрд╛рддреНрд░ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рджреЗрдЦреЗрдВред

student.html


 {% extends "wizard_template.html" %} {% load i18n %} {% block title_wizard %}   {% endblock %} {% block form_wizard %} {% include "input_field.html" with f=wizard.form.sex %} {% include "input_field.html" with f=wizard.form.citizenship %} {% include "input_field.html" with f=wizard.form.doc %} {% include "input_field.html" with f=wizard.form.student_document_type %} {% include "input_field.html" with f=wizard.form.parent_document_type %} {% include "input_field.html" with f=wizard.form.event_date %} {% include "input_field.html" with f=wizard.form.fio %} {% endblock %} {% block button_wizard %} <button type="submit" class="btn btn-primary"> <i class="icon-user icon-white"></i>  <i class="icon-arrow-right icon-white"></i> </button> {% endblock %} 


рдпрд╣рд╛рдБ рд╣рдо рд╣рд╛рде рд╕реЗ рд╕рднреА рдлреЙрд░реНрдо рдлреАрд▓реНрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░рд╛ рдлрд╝реЙрд░реНрдо рд╕реБрд▓рдн рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝реАрд▓реНрдб рдХреЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд┐рд╡рд░рдгред

input_field.html


 <div class="control-group {% if f.errors %}error{% endif %}"> <label class="control-label" for="{{f.id_for_label}}">{{ f.label|capfirst }}</label> <div class="controls"> {{f}} <span class="help-inline"> {% for error in f.errors %} {{ error|escape }} {% endfor %} </span> </div> </div> 


рдореИрдВ рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдЪрд▓реЛ рдЕрдиреБрдмрдВрдз рдХреЗ рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рджреЗрдЦреЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╣реИ, рдХреЗрд╡рд▓ рдмреИрдХ рдмрдЯрди рдХреЛ рдЫрд╛рддреНрд░ рдХреЗ рдбреЗрдЯрд╛ рдФрд░ рд╕реЗрд╡ рдмрдЯрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЫрд╛рддреНрд░ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдиреБрдмрдВрдз рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкреЗрдЬ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

contract.html


 {% extends "wizard_template.html" %} {% block title_wizard %}   {% endblock %} {% block form_wizard %} {% if ok == 'True' %} <div class="alert alert-success"> <button type="button" class="close" data-dismiss="alert">├Ч</button> <strong>!</strong>      . </div> {% endif %} {% include "input_field.html" with f=wizard.form.number %} {% include "input_field.html" with f=wizard.form.phone %} {% endblock %} {% block button_wizard %} <button name="wizard_goto_step" class="btn btn-primary" type="submit" value="{{ wizard.steps.prev }}"> <i class="icon-user icon-white"></i>   <i class="icon-arrow-left icon-white"></i> </button> <input type="submit" class="btn btn-primary" value=""/> {% endblock %} 


рдлреВ, рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ url рдкрд░ рд╣реБрдХ рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 url(r'^addstudent/$',AddStudentWizard.as_view(FORMS),name='addstudent'), url(r'^liststudent$',StudentsView.as_view(),name='liststudent'), 


рдЕрд░реЗ рд╣рд╛рдБ, рд╣рдо рдЫрд╛рддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред

 class StudentsView(TemplateView): template_name = "list.html" def get_context_data(self, **kwargs): context = super(StudentsView, self).get_context_data(**kwargs) context.update({ 'students' : Student.objects.all() }) return context 


рдЖрдЗрдП рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред

 {% extends "base.html" %} {% block content %} {% for s in students %} {{ s }}<br> {% endfor %} <br> <a href="{% url addstudent %}" class="btn btn-primary"> </a> {% endblock %} 

рдЕрдм рдпрд╣ рд╕рдм рд╣реИред рдЕрдм рдЕрднреНрдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИред

рд░реВрдк рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдкред

рдЧрд▓рдд рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рджред


рдкрд┐рдЫрд▓реЗ рдлреЙрд░реНрдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░рдиреЗ рдкрд░ рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ред


рдЧрд▓рдд рдЗрдирдкреБрдЯ рдХреЗ рдмрд╛рджред


рдЬрдм рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ "рд╕рд╣реЗрдЬреЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред


рд╡рд╣ рд╕рдм рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In158969/


All Articles