我在我的模型中使用了‘选项集’,但我不能在模板中显示它们的标签

型号:

class Malpractice_Detail(models.Model):
    
    DayTime_Choice={
        ('morning','صبح'),
        ('noon','ظهر'),
        ('night','شب'),
    }
    
    Damage_Choice={
        ('1','عدم آسیب'),
        ('2','آسیب به بیمار'),   
        ('3','آسیب به پرسنل'),
        ('4','آسیب به تجهیزات پزشکی'),
    }
    
    malperactice_choice={
        ('1','خطاهای دارویی'),
        ('2','خطاهای احیاء قلبی-ریوی'),
        ('3','خطادرتزریقات وخونگیری'),
        ('4','خطادر ثبت اطلاعات وثبت پرونده'),
        ('5','خطاهای مراقبتی وبالینی'),
        ('6','اشتباهات پاراکلینیکی'),
        ('7','اشتباهات جراحی'),
        ('8','خطاهای تشخیصی پزشک'),
        ('9','اشتباهات تجهیزاتی'),
        ('10','اشتباهات مدیریتی')
    }
    hospital=models.ForeignKey('Accounting.hospital', verbose_name='بیمارستان',null=True, on_delete=models.DO_NOTHING)
    name=models.CharField(max_length=50,verbose_name="نام شخصی که خطا از او سرزده",null=True, blank=True)
    unit=models.ForeignKey('Accounting.unit', verbose_name='بخش',null=False, on_delete=models.DO_NOTHING)
    time=models.CharField(max_length=10,choices=DayTime_Choice,null=False,blank=False,verbose_name='زمان وقوع')
    type=models.CharField(max_length=50,choices=malperactice_choice,null=True,blank=True,verbose_name="نوع خطا")
    date=models.DateField("تاریخ رخداد خطا", auto_now=False, auto_now_add=False)
    role=models.ForeignKey('role', verbose_name='سمت خطاکار',null=False,blank=False, on_delete=models.DO_NOTHING)
    damage=models.CharField(max_length=1,verbose_name='آسیب وارد شده',choices=Damage_Choice,default=1,null=False,blank=False)
    st_happened=models.TextField(max_length=1000,verbose_name='شرح خطای رخ داده',null=False,blank=False)
    decisions=models.TextField(max_length=1000,verbose_name='تصمیمات اتخاذ شده',null=True,blank=True)
    cause_of_accident=models.TextField(max_length=1000,verbose_name='دلیل رخداد خطا',null=True,blank=True)
    solution=models.TextField(max_length=1000,verbose_name='پیشنهاد و راهکار',null=True,blank=True)
    user=models.ForeignKey(User, on_delete=models.DO_NOTHING)
    reporting_datetime=models.DateTimeField(auto_now_add=True)
    is_seen=models.BooleanField(verbose_name='دیده شده',default=False,null=True,blank=True)
    has_followup=models.BooleanField(verbose_name='شرح پیگیری دارد',default=False,null=True,blank=True)
    has_feedback=models.BooleanField(verbose_name='شرح بازخورد دارد',default=False,null=True,blank=True)
    
    
    def __str__ (self):
        return str(self.st_happened)
    class Meta:
        ordering=['-reporting_datetime']

在视图中:

def Index(request):
    form=Malpractice_Detail.objects.select_related('Hospital','Unit','Role').filter(user=request.user).values('unit__name','date','role__Name','damage','st_happened','is_seen','has_followup','has_feedback')
    
    return render(request,"malpractice/index.html",{'form':form})

在模板中:显示损坏代码,但不显示损坏标签

{% for item in form  %}
<td>{{item.date|to_jalali:'%Y/%m/%d'}}</td>
<td>{{item.damage}}</td>## This show number of choice
<td>{{item.get_damage_display}}</td> ##Not show label
<td>{{item.st_happened}}</td>

I reed many post about this and try solutions but don't work for me
please help me for solve this problem

推荐答案

don't use .values(…) [django-antipaterns]:.values(…) [Django-doc]提供字典和其他本机类型,它是一个primitive obsession antipattern [refactoring.guru],例如将为ForeignKey返回它们的主键,而不是相应的模型项.

只要让Django把它们包装在Malpractice个对象中,这样它就可以附带所有的逻辑:

def Index(request):
    form = Malpractice_Detail.objects.select_related(
        'Hospital', 'Unit', 'Role'
    ).filter(user=request.user)
    return render(request, 'malpractice/index.html', {'form': form})

您可以使用以下命令访问.unit中的.name个:

{{ item.unit.name }}

Note:用@login_required decorator [Django-doc]美元可能会更好 作为一个装饰者,并因此将函数包装成如下形式:

from django.contrib.auth.decorators import login_required

@login_required
def Index(request):
    # …

Note:Django模型中的字段名称通常写在snake_case中,而不是PascalCase中,所以应该是:Hospital而不是hospital.

Django相关问答推荐

如何在Django模型mixin字段定义中引用模型名称?

如何根据递归ManyToManyField值创建Django查询集?

如何从列中捕获数据并将其添加到下拉菜单中,以便表单填充另一个表

在Python中向函数的查询列表添加条件

Django-admin 显示decorator 按多列排序

如何在视图中的 Django 重定向末尾附加字符串?

如何在 createsuperuser 中实例化表

Pytest-django - 测试创建和传递所需的用户对象

恢复 Django 1.7 RemoveField 迁移

如何在 PyCharm 中重命名 Django 元素?

验证 Django 模型对象的正确方法?

Django判断字段是否为空?

Django:将原始html(来自数据库)显示为html,而不是呈现

为用户添加自定义权限

Django:访问给定字段的 Select 元组

django 有条件地过滤对象

Python Django:您正在使用 staticfiles 应用程序而没有设置 STATIC_ROOT 设置

如何以编程方式对 Django 中的用户进行身份验证?

Django - TypeError - save() 得到了一个意外的关键字参数force_insert

Django - 指定 Django 管理员应该使用哪个模型管理器