data is not saving in model using django formset

柔情痞子 提交于 2019-12-14 03:17:11

问题


i am using django formset to save multiple form at a time.but data is not saving in my database.I am using class based views.This is the model where i want to save my data.

Model

class Period(AbstractBaseModel):

validators = [ScreenMethodValidator, ChainIntegrityValidator]


chain = models.ForeignKey(
    'customers.Chain',
    help_text=_('chain to which period belongs to'),
    verbose_name=_('chain')
    )
start_date = models.DateTimeField(
    default=datetime.datetime.now,
    help_text=_('Starting date of a period'),
    verbose_name=_('start date')
    )
end_date = models.DateTimeField(
    default=datetime.datetime(1970, 01, 01),
    help_text=_('Ending date of a period'),
    verbose_name=_('end date')
)
year = models.IntegerField(
    default=0,
    help_text=_('Financial year'),
    verbose_name=_('year'),
    null=True,blank=True
    )
description = models.TextField(
    help_text=_('Description of a period'),
    verbose_name=_('description'),
    null=True,blank=True
    )   

class Meta:
    app_label = 'accounting'

and View

class PeriodCreate(RequestPassingFormViewMixin, WammuCreateView):
    model = Chain
    template_name = 'dashboard/period_form.html'
    form_class = ChainForm

    def get_object(self):
        chain = Chain.objects.get(pk=self.kwargs['chain_pk'])
        return chain


    def get_success_url(self):
        return reverse('dashboard_period_list', kwargs={'chain_pk': self.object.chain.id, })                                                      


    def get_context_data(self, **kwargs):
        context = super(PeriodCreate, self).get_context_data(**kwargs)
        return context

    def get_form_kwargs(self, *args, **kwargs):
        kwargs = super(PeriodCreate, self).get_form_kwargs(*args, **kwargs)
        chain = get_object_or_404(Chain, pk=self.kwargs['chain_pk'])
        period = Period(chain=chain)
        kwargs['instance'] = period
        return kwargs

    def get(self, request, *args, **kwargs):
        self.object = None
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        PeriodInlineFormSet = inlineformset_factory(Chain, Period,
                                                 form=PeriodInlineForm, 
                                                 can_delete=True,
                                                 extra=12)
        PeriodInlineFormSet.form = staticmethod(curry(PeriodInlineForm, request=request, chain=self.object))
        period_formset = PeriodInlineFormSet()
        return self.render_to_response(
        self.get_context_data(form=form,
                              period_inline_formset=period_formset))
    def post(self, request, *args, **kwargs):
        self.object = Chain()
        form = self.get_form(self.form_class)
        PeriodInlineFormSet = inlineformset_factory(Chain, Period,
                                                        form=PeriodInlineForm,
                                                        can_delete=True, 
                                                        extra=12)
        PeriodInlineFormSet.form = staticmethod(curry(PeriodInlineForm))

        if form.is_valid():
            self.object = form.save(commit=False)

            period_formset = PeriodInlineFormSet(request.POST, instance=self.object)

            if period_formset.is_valid():
                self.object.save()
                period_formset.save()
                return super(PeriodCreate, self).form_valid(form)
            else:
                return self.render_to_response(
                    context=self.get_context_data(form=form, period_inline_formset=period_formset))

        else:
            period_formset = PeriodInlineFormSet(request.POST,instance=self.object)
            return self.render_to_response(
                context=self.get_context_data(form=form, period_inline_formset=period_formset))

and use the following link to see my other code related to this issue where i have tried to use django formset and faced an argument error which has been solved

but now data is not saving in data base when i am trying to post data.surely the error is occurring in my post method,but as i am not used to work with django formset,i can't figure it out after a long findings.

django __init__ method causing argument error

来源:https://stackoverflow.com/questions/35123355/data-is-not-saving-in-model-using-django-formset

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!