Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django从queryset填充form.ChoiceField字段,并将选择关联回模型对象_Django_Django Forms_Choicefield - Fatal编程技术网

Django从queryset填充form.ChoiceField字段,并将选择关联回模型对象

Django从queryset填充form.ChoiceField字段,并将选择关联回模型对象,django,django-forms,choicefield,Django,Django Forms,Choicefield,我有一个简单的表格: class SubmissionQuickReplyForm(forms.Form): comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2})) 我想在表单中添加一个,其中ChoiceField中的选项由queryset填充 class SubmissionQuickReplyForm(forms.Form):

我有一个简单的表格:

class SubmissionQuickReplyForm(forms.Form):
    comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
我想在表单中添加一个,其中ChoiceField中的选项由queryset填充

class SubmissionQuickReplyForm(forms.Form):
        comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
        choice = forms.ChoiceField(...)
例如,如果我有:

q = MyChoices.Objects.all()
如何用q的内容填充ChoiceField,以便在视图中处理表单的结果时,最终可以将对象取回

    if request.method == "POST":
        form = SubmissionQuickReplyForm(request.POST)
        if form.is_valid():
            ch = get_object_or_404(MyChoices, pk=?)
            # How do I get my object from the choice form field?
您可以使用

您只需像这样调用
cleaned_data
即可获得

if request.method == "POST":
    form = SubmissionQuickReplyForm(request.POST)
    if form.is_valid():
        ch = form.cleaned_data.get('choice')

对于ChoiceField,您可以使用

    choice = forms.ChoiceField(choices=[
    (choice.pk, choice) for choice in MyChoices.objects.all()])

^不要这样做——它只会在加载模块时进行计算,这意味着选择不会随着数据的更改而更新。ChoiceField没有queryset,因此这是一种填充ChoiceField@AdambardBe
MyChoices.objects.all()
-小写对象的方法:)
    choice = forms.ChoiceField(choices=[
    (choice.pk, choice) for choice in MyChoices.objects.all()])