Django表单提交操纵值

时间:2018-01-13 19:35:40

标签: python django validation django-forms

所以目前我在Django中遇到了一个Message应用程序。

所以我将用户名列表传递给我的模板到输入字段,以便自动填充建议将邮件发送给谁。

现在当我保存模型时,它说"接收者必须是用户实例"。

如何更改/操作值并在我的数据库中查找关联用户的用户名(就像我在干净和保存功能中尝试过的那样,但我认为错误消息出现在行之前)

非常感谢!

编辑代码:

class MessageForm(forms.ModelForm):
    receiver = forms.CharField(required=True)
    subject = forms.CharField()

    def __init__(self, *args, **kwargs):
        receiver_list = kwargs.pop('receiver_list', None)
        users_list = kwargs.pop('users_list', None)
        super(MessageForm, self).__init__(*args, **kwargs)
        self.fields['receiver'].widget = ListTextWidget(name='receiver_list', users_list=users_list)

    def clean(self):
        cleaned_data = super(MessageForm, self).clean()
        receiver = User.objects.get(username =cleaned_data.get("receiver"))

    def save(self, commit=True):

        message = super(MessageForm, self).save(commit=False)

        # clean data
        message.receiver = User.objects.get(username =self.cleaned_data['receiver'])
        message.subject = self.cleaned_data['subject']
        message.text = self.cleaned_data['text']

        if commit:
            message.save()
        return message

    class Meta:
        model = Message
        fields = {'receiver', 'subject', 'text'}
        labels = {'receiver': 'receiver', 'subject': 'subject', 'text': 'text'}
        widgets = {'text': forms.Textarea(attrs={'cols': 80, })}

1 个答案:

答案 0 :(得分:0)

您已在receiver方法中定义了本地变量clean,但您没有对其执行任何操作。您需要将其分配回已清理的数据。

cleaned_data['receiver'] = receiver