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
.)
- [Answered ]-Simplify django init on getting model object
- [Answered ]-Put a Rendered Django Template in Json along with some other items
- [Answered ]-Old Tweepy's (set_request_token) function
- [Answered ]-Complex Django queryset filtering, involving Q objects and tricky logic
- [Answered ]-Django image not getting uploaded
Source:stackexchange.com