【问题标题】:Form editing in Django UpdateViewDjango UpdateView 中的表单编辑
【发布时间】:2016-10-23 08:56:54
【问题描述】:

我正在尝试更改表单,例如它的标签,甚至可能更多。 我正在使用 UpdateView 的 get_form 方法来更改表单,但它不起作用

views.py

class SystemUpdateView(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()

def get_form(self, form_class=SystemForm):

    form_class.fields['primary_purpose_business_use'].label = "Primary purpose/business use"
    form_class.fields['secondary_purpose_business_uses'].label = "Secondary purpose/business uses"

    return form_class

SystemForm 是从 forms.py 导入的,我认为 get_form 方法目前没有任何作用。可能有什么问题?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您需要实例化一个 form_class 的实例并返回它。 See the documentation

    def get_form(self, form_class=SystemForm):
        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"
    
        return form
    

    【讨论】:

    • 谢谢你,但还是没有运气:(
    • 这很奇怪,因为我在我的 createview 上执行相同的 get_form... updateview 只是不起作用...
    • 尝试在类范围内删除form_class的声明
    • 然后,当我单击发送 POST 的“更新”时,我收到 ImporperlyConfigured 错误。这有什么暗示吗?
    • 给尝试使用此方法删除标签的任何人的小提示。您需要将标签设置为空字符串,而不是 None
    猜你喜欢
    • 2017-01-02
    • 2018-05-10
    • 1970-01-01
    • 2014-02-01
    • 2021-12-15
    • 1970-01-01
    • 2023-02-10
    • 2018-12-03
    • 2013-04-12
    相关资源
    最近更新 更多