在UpdateView中覆盖get_form的问题

时间:2016-06-22 05:36:22

标签: python django

我已经尝试过很多东西来覆盖UpdateView中的get_form方法,但没有一个有效。我想我想做的就是这样,

class SystemUpdateView(UpdateView)
    def get_form(self, form_class):

        form = super(SystemUpdateView, self).get_form(form_class)
        //here I do some modifications to the form
        ....
        ....
        //then return that modified form
        return form

但它什么都不做......任何人都知道为什么会这样? 我只是不明白为什么这不起作用

我对CreateView进行了相同的修改,它可以神奇地工作,但不是在UpdateView中。

但它没有做任何事情,也没有给出任何错误。 完全相同的东西在CreateView中工作但是......

好。这是CreateView

中的工作原理
class SystemCreateView(SuccessMessageMixin, PermissionRequiredMixin, CreateView):
"""View to create Systems"""

form_class = SystemForm
model = System
permission_required = 'services.add_system'
success_message = "System '%(name)s' created successfully."
template_name = 'systems/system_form.html'

# when system created need to add accountable_team_history

def form_valid(self, form):
    system_created = super(SystemCreateView, self).form_valid(form)

    system = self.object

    if form.instance.accountable_team is not None:
        new_history = AccountableTeamHistory(resource=system,
                                     accountable_team=form.instance.accountable_team,
                                     effective_date=datetime.datetime.now())

        new_history.save()

        system.accountable_team_history.add(new_history)

        system.save()

    return system_created

def get_form(self, *args, **kwargs):
    form = super(SystemCreateView, self).get_form(*args, **kwargs)
    form.fields['primary_purpose_business_use'].label= "Primary purpose/business use"
    form.fields['secondary_purpose_business_uses'].label= "Secondary purpose/business uses"
    form.fields['primary_purpose_business_use'].choices = list()
    form.fields['secondary_purpose_business_uses'].choices = list()

    for optgroup in BusinessSystemType.objects.filter(parent__isnull=True):
        form.fields['primary_purpose_business_use'].choices.append(
            (optgroup.name,
             list((subtype.id, subtype.name) for subtype in BusinessSystemType.objects.filter(parent=optgroup))))

        form.fields['secondary_purpose_business_uses'].choices.append(
            (optgroup.name,
             list((subtype.id, subtype.name) for subtype in BusinessSystemType.objects.filter(parent=optgroup))))

    return form

现在在SystemUpdateView中,

class SystemUpdateView(AutoEventLogMixin, SuccessMessageMixin, PermissionRequiredMixin, UpdateView):
"""CRUD update view for :class:`~.System` objects"""

form_class = SystemForm
model = System
permission_required = 'services.change_system'
success_message = "System '%(name)s' updated successfully."
template_name = 'systems/system_form.html'

# when system edited need to modify accountable_team_history

def form_valid(self, form):

    system = self.get_object()

    if form.instance.accountable_team is not None:
        if system.accountable_team == form.instance.accountable_team:
            pass
        else:
            try:
                old_team_history = system.accountable_team_history.get(end_date__isnull=True)

                old_team_history.end_date = datetime.datetime.now()

                old_team_history.save()
            except AccountableTeamHistory.DoesNotExist:
                pass

            new_history = AccountableTeamHistory(resource=system,
                                         accountable_team=form.instance.accountable_team,
                                         effective_date=datetime.datetime.now())

            system.accountable_team_history.add(new_history)

            system.save()

    return super(SystemUpdateView, self).form_valid(form)

def get_form(self, form_class):

    form = super(SystemUpdateView, self).get_form(form_class)
    form.fields['primary_purpose_business_use'].label= "Primary purpose/business use"
    form.fields['secondary_purpose_business_uses'].label= "Secondary purpose/business uses"
    form.fields['primary_purpose_business_use'].choices = list()
    form.fields['secondary_purpose_business_uses'].choices = list()

    for optgroup in BusinessSystemType.objects.filter(parent__isnull=True):
        form.fields['primary_purpose_business_use'].choices.append(
            (optgroup.name,
             list((subtype.id, subtype.name) for subtype in BusinessSystemType.objects.filter(parent=optgroup))))

        form.fields['secondary_purpose_business_uses'].choices.append(
            (optgroup.name,
             list((subtype.id, subtype.name) for subtype in BusinessSystemType.objects.filter(parent=optgroup))))

    return form

此视图对表单没有任何作用。

0 个答案:

没有答案
相关问题