2

在模板上,当我调用 person.health_issue 时,我得到的是“1”、“2”而不是“腹痛”、“过敏反应”。如何显示值(“腹痛”、“过敏反应”)而不是代码(1 或 2 等)。

我也在{{ person.get_health_issue_display }}模板中尝试过,它没有显示任何内容。

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

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

视图.py

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

谁能告诉我该怎么做。

谢谢

4

1 回答 1

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.

  • 还将每个选择中的第一个值设为 integer(1, 'Abdominal pain')而不是 string '1'。只是为了消除混乱。
  • 您拥有default=0选择中不存在的东西。将其更改为default=1
于 2013-06-14T17:38:09.423 回答