1

表格.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")

模型.py

class Actions(models.Model):
    report = models.ForeignKey(Report)
    action =  models.IntegerField('Action type')

打印.html

{{ actionform.as_p}}

PersonActionsForm 包含带有多选复选框的项目。在报表注册页面,用户可以选择任何一项或多项。选中的项目以整数值保存在模型中。

由于我正在渲染整个表单,因此它显示了带有选中和未选中项目的整个表单。

在打印页面中,我只想单独显示选中的项目而不显示复选框。

如何在 django 中执行此操作。

谢谢

4

2 回答 2

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调用 in action_as_text。)

于 2013-07-19T15:54:06.780 回答
1

根据詹姆斯的回答。您可以移动PERSON_ACTIONS到您的模型并以表格形式导入它。

模型.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)

表格.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 %}

希望这可以帮助。

于 2013-07-20T14:06:38.830 回答