You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图中如何渲染诊所前3个可读专科字段并关联实例

解决Django中Clinic实例展示前3个可读专科的问题

核心问题分析

你之前的代码错误原因:

  • clinic.get_speciality_display是方法对象,必须加括号()调用才能得到返回值,直接切片会抛出'method' object is not subscriptable错误。
  • 列表推导式中用i.speciality[:3]取的是数据库存储的原始值,不是可读的显示名称,应该用get_speciality_display()方法获取可读值后再处理。

下面提供两种实用的解决方案:


方法一:在Clinic模型中添加属性方法(推荐)

直接在模型里封装处理逻辑,后续在视图和模板中可以直接调用,代码复用性更高:

from django.db import models

class Clinic(models.Model):
    # 假设你的专科字段是带choices的多选格式(用逗号分隔存储)
    SPECIALITY_CHOICES = [
        ('cardio', '心脏病科'),
        ('neuro', '神经科'),
        ('ped', '儿科'),
        ('ortho', '骨科'),
        # 其他专科选项
    ]
    name = models.CharField(max_length=100)
    speciality = models.CharField(max_length=255, choices=SPECIALITY_CHOICES)
    city = models.CharField(max_length=100)
    ward = models.CharField(max_length=100)

    @property
    def top_3_specialities(self):
        # 获取所有可读的专科名称列表
        all_specialties = self.get_speciality_display().split(',')
        # 取前3个并以逗号连接
        return ','.join(all_specialties[:3])

视图代码

无需额外处理,直接传递实例到模板:

def clinics_index(request):
    clinics = Clinic.objects.all()
    context = {
        'clinics': clinics,
    }
    return render(request, 'guide/clinic/clinic_directory.html', context)

模板使用

直接调用模型属性即可,同时正常渲染其他字段:

{% for clinic in clinics %}
    <div class="clinic-item">
        <h3>{{ clinic.name }}</h3>
        <p>专科:{{ clinic.top_3_specialities }}</p>
        <p>地区:{{ clinic.city }} - {{ clinic.ward }}</p>
    </div>
{% endfor %}

方法二:在视图中动态为实例添加属性

如果不想修改模型,可以在视图循环时给每个Clinic实例添加临时属性:

def clinics_index(request):
    clinics = Clinic.objects.all()
    for clinic in clinics:
        # 获取可读的专科列表,截取前3个后拼接
        specialty_list = clinic.get_speciality_display().split(',')
        clinic.top_3_specialities = ','.join(specialty_list[:3])
    context = {
        'clinics': clinics,
    }
    return render(request, 'guide/clinic/clinic_directory.html', context)

模板使用和方法一完全相同,直接调用{{ clinic.top_3_specialities }}即可。


内容的提问来源于stack exchange,提问作者rolandist_scim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:50:45