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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:39:01