forms.py
PERSON_ACTIONS = (
('1', '01.Allowed to rest and returned to class'),
('2', '02.Contacted parents /guardians'),
('3', '02a.- Unable to Contact'),
('4', '02b.Unavailable - left message'),)
class PersonActionsForm(forms.ModelForm):
action = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=PERSON_ACTIONS, required=False, label= u"Actions")
models.py
class Actions(models.Model):
report = models.ForeignKey(Report)
action = models.IntegerField('Action type')
print.html
{{ actionform.as_p}}
PersonActionsForm包含具有多重复选框的项目。 在报告注册页面中,用户可以选择任何一个或多个项目。选中的项目将作为整数值保存在模型中。
由于我正在渲染整个表单,因此它会显示整个表单,其中包含已选中和未选中的项目。
在打印页面中,我只想单独显示选中的项目而不显示复选框。
如何在django中执行此操作。
由于
答案 0 :(得分:1)
您不应将表单用于非编辑显示目的。相反,在你的课上制作一个方法:
from forms import PERSON_ACTIONS
PERSON_ACTIONS_DICT = dict(PERSON_ACTIONS)
class Actions(models.Model):
report = models.ForeignKey(Report)
action = models.IntegerField('Action type')
def action_as_text(self):
return PERSON_ACTIONS_DICT.get(str(self.action), None)
然后您可以在模板中执行{{ obj.action_as_text }}
并获取所需的文本。请注意,在PERSON_ACTIONS
数组中使用整数可能更为常见(那么您不需要str
中的action_as_text
调用。)
答案 1 :(得分:1)
根据詹姆斯的回答。您可以将PERSON_ACTIONS
移至模型并将其导入表单。
models.py:
PERSON_ACTIONS = (
('1', '01.Allowed to rest and returned to class'),
('2', '02.Contacted parents /guardians'),
('3', '02a.- Unable to Contact'),
('4', '02b.Unavailable - left message'),
)
PERSON_ACTIONS_DICT = dict(PERSON_ACTIONS)
class Actions(models.Model):
report = models.ForeignKey(Report)
action = models.IntegerField('Action type')
def action_as_text(self):
return PERSON_ACTIONS_DICT.get(str(self.action), None)
forms.py:
from .models import PERSON_ACTIONS
class PersonActionsForm(forms.ModelForm):
action = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple(),
choices=PERSON_ACTIONS,
required=False,
label= u"Actions"
)
获取views.py
中的操作:
actions = Actions.objects.filter(....)
return render(request, 'your_template.html', {
.....
'actions': actions
})
...并在模板中呈现:
{% for action in actions %}
{{ action.action_as_text }}
{% endfor %}
希望这有帮助。