django - Dango admin 在调用 __str__ 方法时抛出空异常
问题描述
我正在使用 Django (2.2) 开发一个网络应用程序。我有以下 Profile 模型通过一对一的关系扩展了内置的 User 模型。
class Profile(models.Model):
class Meta:
ordering = ['user__last_name']
txt = models.CharField("TXT", max_length=5, null=True, blank=True, unique=True)
user = models.OneToOneField(User, on_delete=models.PROTECT)
colleague = models.ForeignKey('self', on_delete=models.PROTECT, null=True, blank=True)
def __str__(self):
""" Display of User with its full name"""
return "%s %s" % (self.user.last_name.upper(), self.user.first_name.capitalize())
__str__ 方法在管理列表显示视图或 Django shell 中运行良好。但是,当我尝试访问管理表单时抛出异常,指向 __str__ 方法但没有任何细节。
删除 __str__ 方法后,表单将正确显示。
这是模型管理员
class ProfileAdmin(admin.ModelAdmin):
readonly_fields = ('get_last_name','get_first_name',)
fieldsets = [
('User',
{'fields': ['get_last_name', 'get_first_name','txt', 'colleague']}),
]
#Sélection des champs à afficher dans la vue liste
list_display = ('__str__','get_poste','txt', 'colleague ')
#Champ de recherche
search_fields = ['user__first_name',
'user__last_name',
]
#calculate fields for list_display
def get_last_name(self, obj):
return obj.user.last_name
def get_first_name(self, obj):
return obj.user.first_name
#Define description of fields for list_display
get_last_name.short_description = 'Name'
get_first_name.short_description = 'Firstname'
#Enable sorting on calculated fields
get_last_name.admin_order_field = 'user__last_name'
get_first_name.admin_order_field = 'user__first_name'
任何解决此问题的建议将不胜感激
解决方案
这是因为该对象还没有 a first_name
,last_name
因此您正在调用null.upper()
and null.capitalize()
。尝试在__str__
函数内部处理它。
推荐阅读
- javascript - 用户验证在哪里完成?
- qt - 如何只允许用户在 qml textField 中输入数字和逗号?
- r - 读取 RDS:找不到对象
- github - 在 github 工作流中使用 github 组织机密
- database - 带有列名的列?
- python - 如何将 html 和 css 添加到我的 kivy 应用程序项目中?
- python - Django 在 Windows Server 上使用 mod_wsgi。没有名为“lxml.etree”的模块
- python - Python CSV to JSON 引用嵌套对象
- javascript - 如何使用递归函数获取分页的 json 数据
- java - HTTPS 上的 SpringBoot Zuul 网关