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()])