Отобразить выбор форм в шаблоне Django

В шаблоне, когда я звоню person.health_issue, я получаю "1", "2" вместо "боль в животе", "анафилаксия". Как отобразить значение ("Боль в животе", "Анафилаксия") вместо кода (1 или 2 и т. Д.).

Я пытался с этим также {{ person.get_health_issue_display }} в шаблоне ничего не отображается.

forms.py

   HEALTH_USSUES = (
        ('1', 'Abdominal pain'), ('2', 'Anaphylaxis'), ('3', 'Asthma'),
        ('4', 'Bruising'), ('5', 'Chest pains'), ('6', 'Coughs or Colds')
    )
    class PersonActionsForm(forms.ModelForm):

        action = forms.MultipleChoiceField(widget=forms.Select(), choices=HEALTH_USSUES, required=False)

models.py

class ReportPerson(models.Model):
    report = models.ForeignKey(Report)
    name = models.CharField('Name', max_length=100)
    first_aid = models.BooleanField('First aid', default=False)
    health_issue = models.IntegerField(default=0)

views.py

def report_template(request):
     """"""
    person = ReportPerson.objects.get(pk=person_id)
    """"""
     return render(request, 'event/print.html',
             {
              'person':person
             })

может кто-нибудь сказать мне, как это сделать.

Спасибо

1 ответ

Решение

Поскольку у вас нет выбора в поле модели health_issue вам нужно написать get_health_issue_display метод сам по себе, я назову его как health_issue_display так что по умолчанию get_FOO_display метод не переопределяется:

HEALTH_USSUES = (
    (1, 'Abdominal pain'), (2, 'Anaphylaxis'), (3, 'Asthma'),
    (4, 'Bruising'), (5, 'Chest pains'), (6, 'Coughs or Colds')
)

class ReportPerson(models.Model):
    report = models.ForeignKey(Report)
    name = models.CharField('Name', max_length=100)
    first_aid = models.BooleanField('First aid', default=False)
    health_issue = models.IntegerField(default=1)

    def health_issue_display(self):
        for c in HEALTH_USSUES:
            if c[0] == self.health_issue:
                return c[1]

Или просто добавьте варианты в поле модели:

health_issue = models.IntegerField(default=1, choices=HEALTH_USSUES)

Теперь у вас есть get_health_issue_display,

  • Также сделайте первое значение в каждом выборе как целое число (1, 'Abdominal pain') а не строка '1', Просто чтобы убрать путаницу.
  • У тебя есть default=0 который не существует в выборе. Измените это на default=1
Другие вопросы по тегам