Django格式的隐藏字段不在cleaned中

2024-09-25 10:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个表格:

class CollaboratorForm(forms.Form):
    user = forms.CharField(label="Username",max_length=100)
    canvas = forms.IntegerField(widget=forms.HiddenInput)
    ....
    def clean_user(self):
        user = self.cleaned_data['user']
        canvas = self.cleaned_data['canvas']

在我看来,我只是打电话给你

^{pr2}$

我得到了一个错误:

KeyError at /canvas/1/add-collaborator/
'canvas'

根据firebug发布的值,它似乎并没有进入我的clean函数。我做错了吗?

编辑:发布数据

canvas  1
csrfmiddlewaretoken 2cb73be791b32ca9a41566082c804312
user    username

EDIT2:我也愿意接受一个答案,告诉我如何将主键发送到clean_user函数,其中主键是上面示例url中的/1/。视图中被调用的函数是:

def canvas_add_collaborator(request, pk):

所以我想把pk发送到clean_用户函数,它可以解决我的问题,不需要隐藏字段。


Tags: 函数selfcleanadddatadefformsclass
3条回答

我发现字段声明中的顺序很重要,因此如果要在clean_user方法中访问cleaned_data['canvas'],必须首先在字段中声明canvas。我已经在模型中测试过了

我用这个方法解决了我的问题(可能不是最好的方法,但很管用):

class CollaboratorForm(forms.Form):
    ....
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('canvas', None)
        super(CollaboratorForm, self).__init__(*args, **kwargs)

那么在我看来:

^{pr2}$

也许不是最优雅的解决方案,但它目前有效。欢迎反馈。在

您需要将方法名更改为clean(),而不是clean_user()。'如果您只是验证用户字段,canvas'不在cleaned_数据中。在

相关问题 更多 >