【问题标题】:Django: Store many forms into one tableDjango:将许多表单存储到一张表中
【发布时间】:2016-10-04 09:02:06
【问题描述】:

我正在使用 django v1.8。

A 将一张表拆分为四种形式。

来自我的views.py的示例

ext_cent = ExternalCentersForm(request.POST, prefix='extcent')
ext_cent_diagnostic = ExternalCentersDiagnosticForm(request.POST,prefix='extcentDiagn')
ext_cent_outcomes = ExternalCentersOutcomesForm(request.POST,prefix='extcentOutcomes')
ext_cent_outcomes2 = ExternalCentersOutcomes2Form(request.POST,prefix='extcentOutcomesTwo')

当我试图保存它们时,我会使用

ext_cent_object = ext_cent.save(commit=False)
ext_cent_object.author = request.user
ext_cent_object.save()
ext_cent_diagnostic_object = ext_cent_diagnostic.save(commit=False)
ext_cent_diagnostic_object.author = request.user
ext_cent_diagnostic_object.save()
ext_cent_outcomes_object = ext_cent_outcomes.save(commit=False)
ext_cent_outcomes_object.author = request.user
ext_cent_outcomes_object.save()
ext_cent_outcomes2_object = ext_cent_outcomes2.save(commit=False)
ext_cent_outcomes2_object.author = request.user
ext_cent_outcomes2_object.save()

我的forms.py

class ExternalCentersForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ExternalCentersForm, self).__init__(*args, **kwargs)
        self.helper=FormHelper(self)
        #self.fields['patient'].queryset = Demographic.objects.filter(patient_id=self.instance.patient)
        self.helper.field_class = 'col-md-8'
        self.helper.label_class = 'col-md-3'
        self.helper.layout = Layout(
            Fieldset(
                '<b>Center Information</b>',
                Div(
                        #HTML(u'<br/><div class="col-md-9"><h4><b>Molecular analysis</b></h4></div><br/><br/>'),
                        Div('location_of_center',css_class='col-md-6'),
                        Div('name_of_center',css_class="col-md-6"),
                        Div('type_of_center',css_class="col-md-6"),
                        css_class='row',
                        ),

                ),


            FormActions(
                Submit('submit', "Save changes"),
                Submit('cancel',"Cancel")
            ),
        )
        self.helper.form_tag = False
        self.helper.form_show_labels = True

    class Meta:
        model = Ext_centers
        exclude = ['center_id', 'author']
        list_display = ('title', 'pub_date', 'author')


class ExternalCentersDiagnosticForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ExternalCentersDiagnosticForm, self).__init__(*args, **kwargs)
        self.helper=FormHelper(self)
        #self.fields['patient'].queryset = Demographic.objects.filter(patient_id=self.instance.patient)
        self.helper.field_class = 'col-md-8'
        self.helper.label_class = 'col-md-3'
        self.helper.layout = Layout(
            Fieldset(
                '<b>Diagnostic categories</b>',
                Div(
                        HTML(u'<div class="col-md-9"><h4><b>Paroxysmal nocturnal haemoglobinuria (PNH)</b></h4></div>'),
                        Div('diagn_categ_pnh_no_patient',css_class='col-md-6'),
                        Div('diagn_categ_pnh_distribution',css_class="col-md-6"),
                        css_class='row',
                        ),


                ),
            FormActions(
                Submit('submit', "Save changes"),
                Submit('cancel',"Cancel")
            ),
        )
        self.helper.form_tag = False
        self.helper.form_show_labels = True

    class Meta:
        model = Ext_centers
        exclude = ['center_id', 'author']
        list_display = ('title', 'pub_date', 'author')

class ExternalCentersOutcomesForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ExternalCentersOutcomesForm, self).__init__(*args, **kwargs)
        self.helper=FormHelper(self)
        #self.fields['patient'].queryset = Demographic.objects.filter(patient_id=self.instance.patient)
        self.helper.field_class = 'col-md-8'
        self.helper.label_class = 'col-md-3'
        self.helper.layout = Layout(
            Fieldset(
                '<b>1. Deaths</b>',
                Div(
                        HTML(u'<div class="col-md-9"><h4><b>2015</b></h4></div>'),
                        Div('outcomes_year2015_thal',css_class='col-md-6'),
                        Div('outcomes_year2015_sickle',css_class="col-md-6"),
                        Div('outcomes_year2015_rare',css_class="col-md-6"),
                        css_class='row',
                        ),
                ),


            FormActions(
                Submit('submit', "Save changes"),
                Submit('cancel',"Cancel")
            ),
        )
        self.helper.form_tag = False
        self.helper.form_show_labels = True

    class Meta:
        model = Ext_centers
        exclude = ['center_id', 'author']
        list_display = ('title', 'pub_date', 'author')


class ExternalCentersOutcomes2Form(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(ExternalCentersOutcomes2Form, self).__init__(*args, **kwargs)
        self.helper=FormHelper(self)
        #self.fields['patient'].queryset = Demographic.objects.filter(patient_id=self.instance.patient)
        self.helper.field_class = 'col-md-8'
        self.helper.label_class = 'col-md-3'
        self.helper.layout = Layout(
            Fieldset(
                '<b>2. More measurements</b>',
                Div(
                        #HTML(u'<br/><div class="col-md-9"><h4><b>Molecular analysis</b></h4></div><br/><br/>'),
                        Div('out_patients_married',css_class='col-md-6'),
                        Div('out_patients_divorced',css_class="col-md-6"),
                        Div('out_patients_single',css_class="col-md-6"),
                        Div('out_patients_cohabiting',css_class="col-md-6"),
                        Div('out_patients_parented_children',css_class="col-md-6"),
                        Div('out_thal_women_preg',css_class="col-md-6"),
                        Div('out_patients_splene',css_class="col-md-6"),
                        css_class='row',
                        ),
                ),


            FormActions(
                Submit('submit', "Save changes"),
                Submit('cancel',"Cancel")
            ),
        )
        self.helper.form_tag = False
        self.helper.form_show_labels = True

    class Meta:
        model = Ext_centers
        exclude = ['center_id', 'author']
        list_display = ('title', 'pub_date', 'author')

来自models.py的示例

class Ext_centers(models.Model):
    center_id = models.AutoField(primary_key=True)

    center_city  = models.CharField('City',max_length=45, null=True, blank=True)
    center_country  = models.CharField('Country',max_length=45, null=True, blank=True)
    center_name_of_medical_director  = models.CharField('Name of medical director',max_length=45, null=True, blank=True)
    center_name_of_respondent  = models.CharField('Name of respondent',max_length=45, null=True, blank=True)
    center_status_of_respondent  = models.CharField('Status of respondent',max_length=45, null=True, blank=True)
    center_telephone = models.IntegerField('Telephone', null=True,blank=True)
    center_email = models.EmailField('E-mail',null=True,blank=True)
    center_fax = models.IntegerField('Fax',null=True,blank=True)
    center_website = models.CharField('Website',max_length=45, null=True, blank=True)
    ....

    pub_date = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(User)
    history = HistoricalRecords()


    def __str__(self):
        return self.name_of_center

当我为每个表单生成结果时,我的表中有一个新行,其中仅包含来自特定表单的值。我需要将所有这些表单的数据存储到一个表中。

【问题讨论】:

  • 也请张贴您的表格。
  • @itzmeontv 我现在添加了我的表格。

标签: python django django-models django-forms django-views


【解决方案1】:

在保存的地方你需要“更新”

这是一个例子:

    ext_cent_stored = Ext_centers.objects.get(center_id=ext_cent_object.center_id) 

    form = ExternalCentersForm(request.POST, instance=ext_cent_stored)
                if form.is_valid():
                     form.save()

    form = ExternalCentersDiagnosticForm(request.POST, prefix='extcentDiagn',instance=ext_cent_stored)
                if form.is_valid():
                     form.save()

    form = ExternalCentersOutcomesForm(request.POST,prefix='extcentOutcomes', instance=ext_cent_stored)
                if form.is_valid():
                     form.save()

    form = ExternalCentersOutcomes2Form(request.POST,prefix='extcentOutcomesTwo', instance=ext_cent_stored)
                if form.is_valid():
                     form.save()

对每种保存方法都使用它,您不会丢失旧数据。

谢谢。

【讨论】:

  • 我必须在第一个表格中包含这个还是只为其余的 3 个?因为首先是插入然后更新字段。
  • 另外我想将表单的数据插入到一个表中并且不进行更新。
  • 是否要将对象的所有作者保存到 Ext_centers Table 的同一个条目中?
  • 我想保存通过模板从表单插入的数据。作者我从用户那里得到它以便将它添加到表中。所以,我有一张包含作者字段的表,我使用 4 种表格将数据存储到该一张表中。我现在将在我的问题中添加模型。
  • 试试我的新答案。这样,您可以将所有作者保存到一个字段中。
猜你喜欢
  • 2012-07-04
  • 2012-02-23
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多