如何从模板内的ModelMultipleChoiceField访问对象的字段值?

时间:2019-07-16 19:31:01

标签: django python-3.x django-forms django-templates

我有一个电视频道数据库,我正在使用带有ModelMultipleChoiceField和CheckboxSelectMultiple小部件的Django表单来显示。

模板呈现得很好,但是我如何访问属于表单的ModelMultipleChoiceField字段一部分的单个对象的字段?

渠道模型

class Channel(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

这是表格

class ChannelForm(forms.Form):
    channels_list = forms.ModelMultipleChoiceField(queryset=Channel.objects.all().order_by('name'),widget=forms.CheckboxSelectMultiple)

这就是我尝试通过执行{{channel.name}}访问模板中每个通道的“名称”字段的方式。

{% for channel in form.channels_list %}
   {{ channel }}  accessing:  {{ channel.name }}<br>
{% endfor %}

在渲染时,它只说“正在访问:”而没有频道名称

这是我所要求的view.py:

def generage_recommendation(request):
    if request.method == 'POST':
        # POST code ...
    else:
        form = RecommendationRequestForm()
    return render(request, 'recommendation_home.html', {'form':form})

2 个答案:

答案 0 :(得分:0)

您可以发布您的 views.py 文件。

您不必使用 模板中的form.channels

尝试使用它。

{% for channel in channels_list %}
   {{ channel }}  accessing:  {{ channel.name }}<br>
{% endfor %}

答案 1 :(得分:0)

在您的 views.py 中,
使用ChannelForm而不是RecommendationRequestForm

在模板中,您可以像这样访问ModelMultipleChoiceField的字段值:

{% for key, value in form.channels_list.field.choices %}
  Channel ID = {{ key }}
  Channel Name = {{ value }}
{% endfor %}

(通知.field.代码)