Django 用ModelForm批量保存form表单(非常实用的方法) mfor_verity项目
1.先看一下 Model 非常多
from django.db import models from users.models import UserProfile # Create your models here. class Edc_Project(models.Model): project_name = models.CharField(max_length=200, verbose_name="项目名称", default="") project_number = models.CharField(max_length=200,verbose_name="项目编号", default="") project_user = models.ForeignKey(UserProfile,verbose_name='项目负责人') add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "EDC项目信息" verbose_name_plural = verbose_name class Edc_Center(models.Model): center_name = models.CharField(max_length=200, verbose_name="中心名称", default="") center_number = models.CharField(max_length=200,verbose_name="中心编号", default="") center_user = models.ManyToManyField(UserProfile, verbose_name='中心负责人') add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "EDC中心信息" verbose_name_plural = verbose_name class Edc_Patient(models.Model): patient_number = models.CharField(max_length=200,verbose_name="患者编号", default="") patient_user = models.ForeignKey(UserProfile, verbose_name='患者负责人',null=True,blank=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "EDC患者信息" verbose_name_plural = verbose_name class Edc_Visit(models.Model): visit_name = models.CharField(max_length=200, verbose_name="访视名称", default="") visit_number = models.CharField(max_length=200,verbose_name="访视编号", default="") add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "EDC访视信息" verbose_name_plural = verbose_name class Edc_Form(models.Model): form_name = models.CharField(max_length=200, verbose_name="表单名称", default="") form_number = models.CharField(max_length=200,verbose_name="表单缩写", default="") add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "EDC表单信息" verbose_name_plural = verbose_name class Dr(models.Model): """ 发药纪录 """ formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) dr_center = models.ForeignKey(Edc_Center, verbose_name='发药纪录_中心') dr_patient = models.ForeignKey(Edc_Patient,verbose_name='发药纪录_病人') dr_visit = models.ForeignKey(Edc_Visit, verbose_name='发药纪录_访视') date_delivery = models.DateTimeField(verbose_name='发药日期',blank=True, null=True) drugs_name = models.CharField(verbose_name='药品名称',max_length=50, blank=True, null=True) dose = models.CharField(verbose_name='剂量',max_length=50, blank=True, null=True) dosage_form = models.CharField(verbose_name='剂型', max_length=50, blank=True, null=True) sign_drug_name = models.CharField(verbose_name='领药人签字', max_length=50, blank=True, null=True) drug_user_name = models.CharField(verbose_name='发药人签字', max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "发药纪录" verbose_name_plural = verbose_name # class DrSelect(models.Model): # """ # 发药纪录的药品名称和剂量等 # """ # id = models.IntegerField(db_column='ID', blank=True, null=True) # druge = models.CharField(db_column='DRUGE', max_length=1000, blank=True, null=True) # dose = models.CharField(db_column='DOSE', max_length=1000, blank=True, null=True) # form = models.CharField(db_column='FORM', max_length=1000, blank=True, null=True) # # class Meta: # managed = False # db_table = 'DR_SELECT' class Eg(models.Model): """ 本次实验室检测结果 """ formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) eg_center = models.ForeignKey(Edc_Center, verbose_name='中心') eg_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') eg_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') date_collection = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) eg_cd4 = models.CharField(verbose_name='CD4',max_length=50, blank=True, null=True) eg_cd8 = models.CharField(verbose_name='CD8',max_length=50, blank=True, null=True) hiv_viral_load = models.CharField(verbose_name='HIV病毒载量',max_length=50, blank=True, null=True) leucocyte_count = models.CharField(verbose_name='白细胞计数',max_length=50, blank=True, null=True) total_lymphocyte = models.CharField(verbose_name='总淋巴细胞计数',max_length=50, blank=True, null=True) platelet_count = models.CharField(verbose_name='血小板计数',max_length=50, blank=True, null=True) eg_hemoglobin = models.CharField(verbose_name='血红蛋白',max_length=50, blank=True, null=True) serum_creatinine = models.CharField(verbose_name='血肌酐',max_length=50, blank=True, null=True) urea_nitrogen = models.CharField(verbose_name='血尿素氮',max_length=50, blank=True, null=True) eg_triglyceride = models.CharField(verbose_name='甘油三酯',max_length=50, blank=True, null=True) total_cholesterol = models.CharField(verbose_name='总胆固醇',max_length=50, blank=True, null=True) blood_sugar = models.CharField(verbose_name='血糖',max_length=50, blank=True, null=True) blood_amylase = models.CharField(verbose_name='血淀粉酶',max_length=50, blank=True, null=True) alanine_alt = models.CharField(verbose_name='谷丙转氨酶ALT',max_length=50, blank=True, null=True) aspertate_alt = models.CharField(verbose_name='谷草转氨酶AST',max_length=50, blank=True, null=True) bilirubin_bil = models.CharField(verbose_name='总胆红素T.BIL',max_length=50, blank=True, null=True) eg_hbsag = models.CharField(verbose_name='HBsAg',max_length=50, blank=True, null=True) eg_antihcv = models.CharField(verbose_name='anti-HCV',max_length=50, blank=True, null=True) drug_resistance = models.CharField(verbose_name='耐药性检测',max_length=50, blank=True, null=True) resistance_name = models.CharField(verbose_name='耐药药物名称',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "本次实验室检测结果" verbose_name_plural = verbose_name class Ggn(models.Model): ''' 肝功能 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) ggn_center = models.ForeignKey(Edc_Center, verbose_name='中心') ggn_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') ggn_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采集日期',blank=True, null=True) alanine_alt = models.CharField(verbose_name='谷丙转氨酶ALT',max_length=50, blank=True, null=True) aspertate_alt = models.CharField(verbose_name='谷草转氨酶AST',max_length=50, blank=True, null=True) bilirubin_bil = models.CharField(verbose_name='总胆红素T.BIL',max_length=50, blank=True, null=True) direct_bilirubin = models.CharField(verbose_name='直接胆红素(DBIL)',max_length=50, blank=True, null=True) total_protein = models.CharField(verbose_name='血清总蛋白(TP)',max_length=50, blank=True, null=True) serum_albumin = models.CharField(verbose_name='血清白蛋白(ALB)',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "肝功能" verbose_name_plural = verbose_name class Ncg(models.Model): ''' 尿常规 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) ncg_center = models.ForeignKey(Edc_Center, verbose_name='中心') ncg_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') ncg_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采集日期',blank=True, null=True) acidity_alkalinity = models.CharField(verbose_name='酸碱度(pH)',max_length=50, blank=True, null=True) specific_gravity = models.CharField(verbose_name='尿比重(SG)',max_length=50, blank=True, null=True) bile_proto = models.CharField(verbose_name='尿胆原(URO)',max_length=50, blank=True, null=True) occult_blood = models.CharField(verbose_name='隐血(BLO)',max_length=50, blank=True, null=True) ncg_leukocyte = models.CharField(verbose_name='白细胞(WBC)',max_length=50, blank=True, null=True) ucg_protein = models.CharField(verbose_name='尿蛋白(PRO)',max_length=50, blank=True, null=True) ncg_niaotang = models.CharField(verbose_name='尿糖(GLU)',max_length=50, blank=True, null=True) ncg_bilirubin = models.CharField(verbose_name='胆红素(BIL)',max_length=50, blank=True, null=True) ncg_ketone = models.CharField(verbose_name='酮体(KET)',max_length=50, blank=True, null=True) red_blood = models.CharField(verbose_name='尿红细胞(RBC)',max_length=50, blank=True, null=True) urine_colour = models.CharField(verbose_name='尿液颜色(GOL)',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "尿常规" verbose_name_plural = verbose_name class Sxqgn(models.Model): ''' 肾小球功能 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) sxqgn_center = models.ForeignKey(Edc_Center, verbose_name='中心') sxqgn_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') sxqgn_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) serum_creatinine = models.CharField(verbose_name='血肌酐',max_length=50, blank=True, null=True) urea_nitrogen = models.CharField(verbose_name='血尿素氮',max_length=50, blank=True, null=True) uric_acid = models.CharField(verbose_name='血尿酸(UA)',max_length=50, blank=True, null=True) serum_cystatin = models.CharField(verbose_name='血清胱抑素C(CysC)',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "肾小球功能" verbose_name_plural = verbose_name class Tr(models.Model): ''' 本次抗毒治疗治疗处方 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) tr_center = models.ForeignKey(Edc_Center, verbose_name='中心') tr_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') tr_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') drugs_name = models.CharField(verbose_name='药品名称',max_length=50, blank=True, null=True) unit_dose = models.CharField(verbose_name='单位剂量',max_length=50, blank=True, null=True) single_dosage = models.CharField(verbose_name='单次用药量',max_length=50, blank=True, null=True) method_taking = models.CharField(verbose_name='服用方法',max_length=50, blank=True, null=True) dose_hair = models.CharField(verbose_name='发药量',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "本次抗毒治疗治疗处方" verbose_name_plural = verbose_name class V1A(models.Model): ''' V1A ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) v1a_center = models.ForeignKey(Edc_Center, verbose_name='中心') v1a_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') v1a_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') agency_code = models.CharField(verbose_name='治疗机构代码',max_length=50, blank=True, null=True) treatment_number = models.CharField(verbose_name='抗病毒治疗号',max_length=50, blank=True, null=True) antiviral_therapy = models.CharField(verbose_name='抗病毒治疗类型',max_length=50, blank=True, null=True) treatment_code = models.CharField(verbose_name='病人治疗编码',max_length=50, blank=True, null=True) card_number = models.CharField(verbose_name='传染病报告卡卡片编号',max_length=50, blank=True, null=True) birth_date = models.CharField(verbose_name='出生日期',max_length=50, blank=True, null=True) v1a_sex = models.CharField(verbose_name='性别',max_length=50, blank=True, null=True) source_treatment = models.CharField(verbose_name='抗病毒治疗费用来源',max_length=50, blank=True, null=True) sources_cost = models.CharField(verbose_name='其他费用来源',max_length=50, blank=True, null=True) marital_status = models.CharField(verbose_name='婚姻状况',max_length=50, blank=True, null=True) hiv_time = models.CharField(verbose_name='确诊HIV抗体阳性时间',max_length=50, blank=True, null=True) infection_pathway = models.CharField(verbose_name='感染途径',max_length=50, blank=True, null=True) year_tuberculosis = models.CharField(verbose_name='近一年是否患肺结核',max_length=50, blank=True, null=True) patient_phthisis = models.CharField(verbose_name='病人是否接受抗结核治疗',max_length=50, blank=True, null=True) aids_symptom = models.CharField(verbose_name='近三个月是否出现下列艾滋病相关病症',max_length=50, blank=True, null=True) related_diseases = models.CharField(verbose_name='相关疾病/症状',max_length=50, blank=True, null=True) other_diseases = models.CharField(verbose_name='其它机会性感染/肿瘤',max_length=50, blank=True, null=True) below_diseases = models.CharField(verbose_name='目前病人是否出现以下症状、体征',max_length=50, blank=True, null=True) v1a_diseases = models.CharField(verbose_name='症状、体征',max_length=50, blank=True, null=True) clinical_stages = models.CharField(verbose_name='目前临床病人WHO临床分期',max_length=50, blank=True, null=True) v1a_weight = models.CharField(verbose_name='病人目前体重',max_length=50, blank=True, null=True) v1a_height = models.CharField(verbose_name='身高',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "V1A" verbose_name_plural = verbose_name class V1C(models.Model): ''' V1C ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) v1c_center = models.ForeignKey(Edc_Center, verbose_name='中心') v1c_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') v1c_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') scheme_antivira = models.CharField(verbose_name='既往接受过几种方案的抗病毒治疗',max_length=50, blank=True, null=True) antiviral_name = models.CharField(verbose_name='曾使用的抗病毒药物名称',max_length=50, blank=True, null=True) prevent_infect = models.CharField(verbose_name='是否接受过复方新诺明预防机会性感染治疗',max_length=50, blank=True, null=True) whether_take = models.CharField(verbose_name='目前是否仍在服用',max_length=50, blank=True, null=True) whether_adanon = models.CharField(verbose_name='目前是否使用美沙酮',max_length=50, blank=True, null=True) date_antitoxic = models.CharField(verbose_name='抗毒治疗开始日期',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "V1C" verbose_name_plural = verbose_name class V2A(models.Model): ''' V2A ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) v2a_center = models.ForeignKey(Edc_Center, verbose_name='中心') v2a_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') v2a_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') patient_died = models.CharField(verbose_name='病人是否死亡或转出',max_length=50, blank=True, null=True) cause_termination = models.CharField(verbose_name='终止原因',max_length=50, blank=True, null=True) date_death = models.CharField(verbose_name='死亡日期',max_length=50, blank=True, null=True) cause_death = models.CharField(verbose_name='死亡原因',max_length=50, blank=True, null=True) transfer_date = models.CharField(verbose_name='转出日期',max_length=50, blank=True, null=True) flup_content = models.CharField(verbose_name='本次随访内容',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "V2A" verbose_name_plural = verbose_name class V2B(models.Model): ''' v2b ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) v2b_center = models.ForeignKey(Edc_Center, verbose_name='中心') v2b_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') v2b_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') clinical_stages = models.CharField(verbose_name='目前病人WHO临床分期',max_length=50, blank=True, null=True) aids_disease = models.CharField(verbose_name='自上次访视,是否出现过以下艾滋病相关病症',max_length=50, blank=True, null=True) skin_damage = models.CharField(verbose_name='皮肤损害',max_length=50, blank=True, null=True) disposal_method = models.CharField(verbose_name='处置方式',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "V2B" verbose_name_plural = verbose_name class V2D(models.Model): ''' V2D ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) v2d_center = models.ForeignKey(Edc_Center, verbose_name='中心') v2d_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') v2d_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') infection_treatment = models.CharField(verbose_name='是否接受过复方新诺明预防机会性感染治疗',max_length=50, blank=True, null=True) if_adanon = models.CharField(verbose_name='目前是否使用美沙酮',max_length=50, blank=True, null=True) clinical_disposal = models.CharField(verbose_name='临床处置',max_length=50, blank=True, null=True) change_medicine = models.CharField(verbose_name='换药原因',max_length=50, blank=True, null=True) other_dressing = models.CharField(verbose_name='其他换药原因',max_length=50, blank=True, null=True) change_reaction = models.CharField(verbose_name='换药具体副反应',max_length=50, blank=True, null=True) cause_drug = models.CharField(verbose_name='停药原因',max_length=50, blank=True, null=True) other_drug = models.CharField(verbose_name='其他停药原因',max_length=50, blank=True, null=True) change_drug = models.CharField(verbose_name='停药具体副反应',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "V2D" verbose_name_plural = verbose_name class Xcg(models.Model): ''' 血常规 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) xcg_center = models.ForeignKey(Edc_Center, verbose_name='中心') xcg_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') xcg_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) leucocyte_count = models.CharField(verbose_name='白细胞计数',max_length=50, blank=True, null=True) lymphocyte_count = models.CharField(verbose_name='总淋巴细胞计数',max_length=50, blank=True, null=True) platelet_count = models.CharField(verbose_name='血小板计数',max_length=50, blank=True, null=True) xcg_hemoglobin = models.CharField(verbose_name='血红蛋白',max_length=50, blank=True, null=True) neutrophil_count = models.CharField(verbose_name='中性粒细胞计数',max_length=50, blank=True, null=True) red_number = models.CharField(verbose_name='红细胞总数',max_length=50, blank=True, null=True) red_volume = models.CharField(verbose_name='平均红细胞容积',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "血常规" verbose_name_plural = verbose_name class Xdfm(models.Model): ''' 血淀粉酶 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) xdfm_center = models.ForeignKey(Edc_Center, verbose_name='中心') xdfm_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') xdfm_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) blood_amylase = models.CharField(verbose_name='血淀粉酶',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "血淀粉酶" verbose_name_plural = verbose_name class Xt(models.Model): ''' 血糖 ''' formame = models.CharField(verbose_name='Modelform名称',max_length=50, blank=True, null=True) xt_center = models.ForeignKey(Edc_Center, verbose_name='中心') xt_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') xt_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) blood_sugar = models.CharField(verbose_name='血糖',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "血糖" verbose_name_plural = verbose_name class Xzsx(models.Model): ''' 血脂四项 ''' formame = models.CharField(verbose_name='Modelform名称', max_length=50, blank=True, null=True) xzsx_center = models.ForeignKey(Edc_Center, verbose_name='中心') xzsx_patient = models.ForeignKey(Edc_Patient,verbose_name='病人') xzsx_visit = models.ForeignKey(Edc_Visit, verbose_name='访视') collection_date = models.DateTimeField(verbose_name='采血日期',blank=True, null=True) xzsx_triglyceride = models.CharField(verbose_name='甘油三酯',max_length=50, blank=True, null=True) total_cholesterol = models.CharField(verbose_name='总胆固醇',max_length=50, blank=True, null=True) low_lipoprotein = models.CharField(verbose_name='低密度脂蛋白',max_length=50, blank=True, null=True) high_lipoprotein = models.CharField(verbose_name='高密度脂蛋白',max_length=50, blank=True, null=True) add_time = models.DateTimeField(auto_now=True) class Meta: verbose_name = "血脂四项" verbose_name_plural = verbose_name
2.ModelForm的定义
from django import forms from django.forms import ModelForm from .models import Dr,Eg,Ggn,Ncg,Sxqgn,Tr,V1A,V1C,V2A,V2B,V2D,Xcg,Xdfm,Xt,Xzsx class DrForm(ModelForm): class Meta: model = Dr localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class EgForm(ModelForm): class Meta: model = Eg localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class GgnForm(ModelForm): class Meta: model = Ggn localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class NcgForm(ModelForm): class Meta: model = Ncg localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class SxqgnForm(ModelForm): class Meta: model = Sxqgn localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class TrForm(ModelForm): class Meta: model = Tr localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V1AForm(ModelForm): class Meta: model = V1A localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V1CForm(ModelForm): class Meta: model = V1C localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V2AForm(ModelForm): class Meta: model = V2A localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V2BForm(ModelForm): class Meta: model = V2B localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V2DForm(ModelForm): class Meta: model = V2D localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class V2DForm(ModelForm): class Meta: model = V2D localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class XcgForm(ModelForm): class Meta: model = Xcg localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class XdfmForm(ModelForm): class Meta: model = Xdfm localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class XtForm(ModelForm): class Meta: model = Xt localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, } class XzsxForm(ModelForm): class Meta: model = Xzsx localized_fields = ('__all__') exclude = ['add_time'] widgets = {} error_messages = { 'protype': { 'required':'这是个必填项目', #生成错误信息 }, }
3.View逻辑的写法
from django.shortcuts import render import os import re import json from mfor_verity.settings import MEDIA_ROOT from django.contrib.auth.decorators import login_required # 指定返回给用户的类型 from django.http import HttpResponse from django.shortcuts import render from django.utils.decorators import method_decorator from django.views.generic.base import View from django.core import serializers from .forms import DrForm,EgForm,GgnForm,NcgForm,SxqgnForm,TrForm,V1AForm,V1CForm,V2AForm,V2BForm,V2DForm,XcgForm,XdfmForm,XtForm,XzsxForm from django.forms.formsets import formset_factory from project_contrast.models import Edc_Project,Edc_Center,Edc_Patient,Edc_Visit,Edc_Form from users.models import UserProfile # Create your views here. class ProjectFormSave(View): """ 保存表单信息 """ def post(self,request): #在model中统一定义一个字段为modelform的名称, # 通过前端的填写先任意匹配一个modelfrom得到这个字段的名称后, # 进行真正modelform的数据获取 form = XtForm(request.POST) print(form.data) # eval() 字符串转变量 代表modelform 如:DrForm formset = eval(form.data.get('formame')) form = formset(request.POST) if form.is_valid(): #注释为保存外键的写法,前端没有输入外键内容的情况下,本次为前端通过 #点击赋予值进行隐藏 # instance = form.save(commit=False) # instance.xt_center_id = edc_center_id # instance.xt_patient_id = edc_patient_id # instance.xt_visit_id = edc_visit_id # instance.save() form.save() else: error = form.errors #错误信息 # return render(request, 'forms.html', {'form': form, 'error': error}) print(error) return HttpResponse('{"status":"fail"}', content_type='application/json') return HttpResponse('{"status":"success"}', content_type='application/json') def get(self,request): """ 生成前端的表单文件添加一定的样式注意:html中一定要加name属性和model的name一致 """ model_form_name = request.GET.get('model_form_name','') #字符串转变量 formset = eval(model_form_name+'Form()') print(formset) all_html = '' for form in formset: all_html += '<div class="form-group">' \ '<label for="{}" class="col-sm-4 control-label">{}' \ '</label><div class="col-sm-8">' \ '<input type="text" name="{}" class="form-control" id="{}">' \ '</div></div>'.format(form.id_for_label,form.label,form.html_name,form.id_for_label) all_datas = { 'all_html':all_html } return HttpResponse(json.dumps(all_datas), content_type='application/json')
4.URL的写法
# 返回对照页面 url(r'^control_page/$', Control_Page.as_view(), name='control_page'), #保存提交的表单信息 url(r'^projectformsave/$', ProjectFormSave.as_view(), name='projectformsave'),
5.Jquery的ajax的写法
var model_form_name = ''; //点击右侧表单信息获取相应model生成form表单 $('#id_form_menu>a').each(function(index){ $(this).on('click',function(){ //获取model的名称 model_form_name = $(this).children('span').text(); console.log(model_form_name); $.get('/projectformsave/',{'model_form_name':model_form_name},function(data){ console.log(data); console.log(data.all_html); $('#project_form_edc').empty(); $('#project_form_edc').append(data.all_html); }) }) }); //Ajax异步提交表单提交表单 $('#id_edc_submit').on('click',function(){ var data = $("#project_form_edc").serialize(); $.ajax({ cache: false, type: "POST", url: "/projectformsave/", dataType:'json', async: true, data:data, success: function(data) { }, beforeSend: function(xhr, settings) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } }); });
6.HTML的写法先通过点击来获取表单的html内容,生成表单然后ajax异步提交表单
<form id = "project_form_edc" action="/projectformsave/" class="form-horizontal" role="form"> {# <div class="form-group">#} {# <label for="firstname" class="col-sm-4 control-label">名字</label>#} {# <div class="col-sm-8">#} {# <input type="text" class="form-control" id="firstname">#} {# </div>#} {# </div>#} {# <div class="form-group">#} {# <label for="lastname" class="col-sm-4 control-label">化疗周期</label>#} {# <div class="col-sm-8">#} {# <input type="text" class="form-control" id="lastname">#} {# </div>#} {# </div>#} {# <div class="modal-footer">#} {# <button type="submit" id = "jsLoginBtn" class="btn btn-primary">#} {# 提交更改#} {# </button>#} {# </div>#} </form> <div class="modal-footer"> <button type="button" id = "id_edc_submit" class="btn btn-primary"> 提交表单 </button> </div> </section>