单独显示选中的项目而不显示复选框

时间:2013-07-15 10:29:28

标签: django django-models django-forms django-templates django-views

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中执行此操作。

由于

2 个答案:

答案 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 %}

希望这有帮助。