[Answered ]-Showing the checked item alone without check box

1👍

Based on James’s answer. You can move PERSON_ACTIONS to your model and import it in form.

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"
    )

Get the actions in views.py:

actions = Actions.objects.filter(....)
return render(request, 'your_template.html', {
    .....
    'actions': actions   
})

… and render it in template:

{% for action in actions %}
    {{ action.action_as_text }}
{% endfor %}

Hope this helps.

1👍

You shouldn’t be using forms for non-edit display purposes. Instead, make a method on your class:

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)

Then you can just do {{ obj.action_as_text }} in a template and get the text you want. Note that it would probably be more common to use integers in the PERSON_ACTIONS array (then you don’t need the str call in action_as_text.)

Leave a comment