Django Admin访问Groups页报'NoneType' object has no attribute 'id'如何解决
错误原因
Group模型的headman字段配置了null=True允许为空,当你创建未设置负责人的群组时,obj.headman为None,link_to_headman方法中直接调用obj.headman.id、obj.headman.last_name就会触发NoneType无对应属性的报错。另外curator字段同样允许为空,对应的link_to_curator方法也存在相同的潜在报错风险。
修改方案
调整GroupAdmin中的自定义展示方法,增加非空判断,修改后代码如下:
@admin.register(Group) class GroupAdmin(admin.ModelAdmin): list_display = ("descipline", "hours_to_take", 'link_to_curator', "link_to_headman") list_filter = ("descipline", "hours_to_take") search_fields = ("descipline__startswith", ) # 可选调整:如果不需要空值字段作为跳转链接,可修改list_display_links,比如只保留descipline list_display_links = ['link_to_curator', 'link_to_headman'] def link_to_headman(self, obj): if obj.headman: link = reverse("admin:students_student_change", args=[obj.headman.id]) return format_html('<a href="{}">{}</a>', link, obj.headman.last_name) # 空值返回占位文本 return "无" # 给方法设置展示列名 link_to_headman.short_description = "负责人" # 同理优化curator的跳转方法 def link_to_curator(self, obj): if obj.curator: link = reverse("admin:yourapp_teacher_change", args=[obj.curator.id]) # 注意替换yourapp为你的Teacher模型所属app名 return format_html('<a href="{}">{}</a>', link, obj.curator.last_name) return "无" link_to_curator.short_description = "辅导员" class Group(models.Model): descipline = models.CharField(max_length=200) hours_to_take = models.IntegerField(default=32) headman = models.ForeignKey('students.Student',blank=True, null=True, unique=False, on_delete=models.CASCADE, related_name="headed_group") curator = models.ForeignKey(Teacher, on_delete=models.CASCADE, null=True, blank=True,)
内容的提问来源于stack exchange,提问作者fedorchukdmytro
相关产品推荐
相关产品推荐

