python - 如何从 Django 表单获取 ChoiceField 值?

标签 python django

我想从 ChoiceField 生成的下拉列表中获取所选的电子邮件 ID。我已经写了一个代码,但显然它不起作用。 我该怎么做?

这是我的views.py

@login_required
def assign(request):
    if request.method == 'POST':
        assign_now = AssignTask(data=request.POST, user=request.user)
        if assign_now.is_valid():
            task_title = assign_now.cleaned_data.get('title')
            task_description = assign_now.cleaned_data.get('desc')
            assign_email = assign_now.cleaned_data('assign_to')
            assign_email = dict(AssignTask.fields['assign_to'].choices)[assign_email]
            user_details = User.objects.get(email=assign_email)
            t = Task(title=task_title, description=task_description, assigned_to=user_details)
            t.save()
            return HttpResponse('<h2>Successfully assigned task</h2>')
        else:
            return HttpResponse('<h2><Task assignment failed/h2>')
    else:
        return HttpResponse('<h2>Request method error</h2>')

这是我的forms.py

class AssignTask(forms.Form):
    title = forms.CharField(max_length=200)
    description = forms.CharField(widget=forms.Textarea)
    assign_to = forms.ChoiceField(widget=forms.Select(choices=[]))

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        user_email = self.user.email.split('@')[1]
        super(AssignTask, self).__init__(*args, **kwargs)
        self.fields['assign_to'] = forms.ChoiceField(choices=[(i.email, i.email) for i in User.objects.filter(is_active=True, email__icontains=user_email)])

我收到的错误是:

File "/home/gblp250/PycharmProjects/assignment/todoapp/views.py" in assign
  118.             assign_email = assign_now.cleaned_data('assign_to')

Exception Type: TypeError at /assign
Exception Value: 'dict' object is not callable

最佳答案

从错误回溯中,我们可以了解到,您缺少 .get() 函数

所以,试试这个,

assign_email = assign_now.cleaned_data<b>.get</b>('assign_to')
而不是

 assign_email = assign_now.cleaned_data('assign_to')
<小时/>

完整的查看功能

@login_required
def assign(request):
    if request.method == 'POST':
        assign_now = AssignTask(data=request.POST, user=request.user)
        if assign_now.is_valid():
            task_title = assign_now.cleaned_data.get('title')
            task_description = assign_now.cleaned_data.get('desc','Sample Description')
            assign_email = assign_now.cleaned_data.get('assign_to')
            user_details = User.objects.get(email=assign_email)
            t = Task(title=task_title, description=task_description, assigned_to=user_details)
            t.save()
            return HttpResponse('<h2>Successfully assigned task</h2>')
        else:
            return HttpResponse('<h2><Task assignment failed/h2>')
    else:
        return HttpResponse('<h2>Request method error</h2>')

关于python - 如何从 Django 表单获取 ChoiceField 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54978012/

相关文章:

Python:如何将 os.system 的输出重定向到 python shell?

python - pyinstaller Hook 从未被调用

python - 如何将两个字符串转换成单个字典?

python - 从 Django 中的模型字段在 ListView 中创建列表

css - Django Compressor 不重新生成压缩的 CSS

python - 南 : updating boolean field

python - 使用 python 多重处理通过迭代返回多个变量的平均值

python - ValueError : Length mismatch: Expected axis has 0 elements, 新值有 8 个元素

javascript - "Could not parse reminder error"-Django

Django rest框架上传多个文件