为了账号安全,请及时绑定邮箱和手机立即绑定

Django,获取 ChoiceField 形式的值

Django,获取 ChoiceField 形式的值

隔江千里 2022-08-25 13:33:55
我有一个表单,其中包含我的数据库上的项目选择字段。我的问题是我如何获得我的choicheField的选定值?forms.pyclass list_data(forms.Form):    message = forms.CharField(widget=forms.Textarea)    def __init__(self, author, *args, **kwargs):        super(list_data, self).__init__(*args, **kwargs)        self.fields['List'] = forms.ChoiceField(            choices=[(o.id, str(o)) for o in List.objects.filter(author=author)]        )views.pydef sms(request):    form2  = list_data(author=request.user)    if request.method == "POST":        form2 = list_data(request.POST)        if form2.is_valid():            choice = form2.cleaned_data["List"]            print(choice)    else:        return render(request, "data_list/sms.html", {"form2": form2})    return render(request, "data_list/sms.html", {"form2": form2})当我尝试按下提交按钮时,它会给我这个错误: int() argument must be a string, a bytes-like object or a number, not 'QueryDict'所以我改变了错误是消失的,但它没有打印其他任何东西。form2 = list_data(request.POST)form2 = list_data(author=request.user)感谢您的帮助models.pyclass List(models.Model):    item = models.CharField(max_length=100)    content = models.TextField()    site = models.CharField(max_length=11, choices=THE_SITE)    content_list = models.TextField()    author = models.ForeignKey(User, on_delete=models.CASCADE)    def __str__(self):        return self.item
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

在 POST 请求的情况下,您作为第一个参数传递,从而作为 传递,而不是作为数据传递。您可以将视图重写为:request.POSTauthor


def sms(request):

    if request.method == 'POST':

        form2 = list_data(request.user, data=request.POST)

        if form2.is_valid():

            choice = form2.cleaned_data["List"]

            print(choice)

    else:

        form2  = list_data(author=request.user)

    return render(request, "data_list/sms.html", {"form2": form2})

但是,我建议在这里使用ModelChoiceField [Django-doc],它将删除一些样板逻辑,然后您可以使用模型对象:


class ListDataForm(forms.Form):

    message = forms.CharField(widget=forms.Textarea)

    list = forms.ModelChoiceField(queryset=List.objects.none())


    def __init__(self, author, *args, **kwargs):

        super(list_data, self).__init__(*args, **kwargs)

        self.fields['list'].queryset = List.objects.filter(author=author)

请注意,根据 PEP-0008 样式指南,类应以 PerlCase 编写(因此 ,不是 ),属性应以 snake_case 编写,因此 ,不是 。ListDataFormlist_datalistList


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号