Django获取关联模型TextField长度报错:Recipient对象无len()方法
解决Django中获取关联模型TextField长度的问题
嘿,这个报错的原因其实很清晰——你调用len(x.department.school)的时候,x.department.school返回的不是学校名称的字符串,而是整个School模型的实例对象,自然没法用len()去计算长度啦!
先理清楚模型关联逻辑
假设你的模型结构大概是这样的(应该和实际情况匹配):
class School(models.Model): name = models.TextField() # 存储学校名称的TextField字段 # 其他字段... class Department(models.Model): school = models.ForeignKey(School, on_delete=models.CASCADE) # 其他字段... class Recipient(models.Model): department = models.ForeignKey(Department, on_delete=models.CASCADE) # 其他字段...
正确获取学校名称长度的方法
你需要明确访问到School模型中存储名称的那个TextField字段(比如上面的name),再去计算长度:
x = Recipient.objects.get(id='1234551') # 访问School实例的name字段,再计算长度 school_name_length = len(x.department.school.name)
模板中直接处理的更优方案
既然你是要在模板里处理过长的学校名称避免PDF重叠,其实可以直接用Django内置的模板过滤器,不用在视图里提前计算长度:
- 获取名称长度:
{{ recipient.department.school.name|length }} - 直接截断过长名称(更贴合你的实际需求):
- 按字符截断:
{{ recipient.department.school.name|truncatechars:30 }}# 保留30个字符,超出部分用...代替 - 按单词截断:
{{ recipient.department.school.name|truncatewords:5 }}# 保留5个单词
- 按字符截断:
内容的提问来源于stack exchange,提问作者tango ward
相关产品推荐
相关产品推荐

