在 forms.Form 中创建方法

Posted

技术标签:

【中文标题】在 forms.Form 中创建方法【英文标题】:Create method in forms.Form 【发布时间】:2014-09-25 14:33:26 【问题描述】:

我的问题是,我可以在表单中创建方法吗?

我想在 UserChangeForm 中创建一个方法,它应该控制一些事情。 如果提交,我如何在save() 中调用此方法? 在forms.form 中我也必须创建一个 save() 吗?

我试过了:

class UserChangeForm(forms.Form):
    #fields for the form

    def create_club_contact(self):
        user = super(UserChangeForm, self).save(commit=False)

        if information is None:
           #create clubcontact 
        else:
           #update clubcontact 
        return clubcontact

    def clean_password2(self):
        #check password
        return password2

    def save(self):
        data = self.cleaned_data
        user = TennisClub(link=data['link'], name=data['name'])
        user.save()
        contact = self.create_club_contact()
        user.club_contact = contact
        user.save()

这样我总是得到这个错误

'super' 对象没有属性'save'

我认为 forms.Form 需要一个 save() 方法,但我不知道如何正确执行。 在文档中,我没有看到这样的例子。

感谢您的帮助。

【问题讨论】:

首先,不要为提出问题和作为新手而道歉。没有什么不对的。在contact = self.create_club_contact() 行中,您调用save() 中的一个方法。就是这样,你的问题到底出在哪里?你不应该让user.save() 两次,最后只做一次。请更正此问题:name =data['name']name=data['name'] 【参考方案1】:
class MyForm(forms.Form):
    def __init__(self):
        self.member = False

    # example of a method with return statement
    def my_method(self):
        return something

    # example for a void method, no return value
    def another_method(self):
        self.member = True

    def save(self):
        my_variable = self.my_method()
        self.another_method()
        # continue with your logic

编辑:

我认为创建方法和调用它们没有问题。上面的内容你可能已经很清楚了。不过好像你还有一个问题,但是你不能质疑它对。

您的表单继承自 Form。父类Form 有一个方法save(),你想重写它。

把这个放在你方法的末尾save(),然后再试一次:

return super(UserChangeForm, self).save()

【讨论】:

以上是关于在 forms.Form 中创建方法的主要内容,如果未能解决你的问题,请参考以下文章

Django的form组件

在 django 中创建表单时对象不可调用错误

Django Form表单

Django_form

form组

Django——文件上传