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

Django将etudiant实例加入Group时报无et_set属性错误如何解决

问题分析

你代码里共有3处明确的错误:

  • 第一处:Group.objects.get(name="etudiant") 返回的是单个Group实例,不是查询集,不需要也不能用group[0]访问,直接用group即可。
  • 第二处核心错误:你的自定义etudiant模型和Django自带的Group模型没有建立任何关联关系,Django不会自动生成反向关联的et_set属性,所以调用这个属性必然报错。
  • 第三处逻辑错误:Django的Group权限组原生设计是和自带的User用户模型绑定的,你如果要给学生分配用户组,优先要做的是让etudiant模型和User体系打通,而不是直接尝试把自定义模型实例加到Group里。

修复方案

方案1:直接在etudiant和Group之间建立多对多关联

适合不需要用Django自带的权限、登录体系的场景:

  1. 修改Models.py,新增关联字段
from django.contrib.auth.models import Group

class etudiant(models.Model):
    # 原有字段保持不变
    identifiant = models.CharField(primary_key=True,max_length=20)
    nom = models.CharField(max_length=20)
    prenom = models.CharField(max_length=20) 
    date_naissance = models.DateField(blank=True,null=True)
    photo = models.ImageField(upload_to=None, height_field=None, 
    width_field=None, max_length=100,blank=True,null=True)
    adresse = models.CharField(max_length=50)
    email = models.EmailField(max_length=50,null=True,blank=True)
    état = models.CharField(max_length=20)
    situation = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    # 新增和Group的多对多关联,指定反向关联名
    groups = models.ManyToManyField(Group, related_name="etudiant_set")
  1. 执行数据库迁移
python manage.py makemigrations
python manage.py migrate
  1. 修改Views.py里的报错行
group = Group.objects.get(name="etudiant") 
# 去掉错误的[0]索引,用自定义的反向关联名添加
group.etudiant_set.add(et)
# 也可以直接从学生侧添加:et.groups.add(group)

方案2:对接Django自带用户体系(推荐)

符合Django原生设计,后续可以直接用自带的登录、权限校验能力:

  1. 修改Models.py,让etudiant继承AbstractUser
from django.contrib.auth.models import AbstractUser

class etudiant(AbstractUser):
    # 去掉原有代码里的password、email字段,AbstractUser已经自带
    identifiant = models.CharField(primary_key=True,max_length=20)
    nom = models.CharField(max_length=20)
    prenom = models.CharField(max_length=20) 
    date_naissance = models.DateField(blank=True,null=True)
    photo = models.ImageField(upload_to=None, height_field=None, 
    width_field=None, max_length=100,blank=True,null=True)
    adresse = models.CharField(max_length=50)
    état = models.CharField(max_length=20)
    situation = models.CharField(max_length=20)
  1. 在项目settings.py中添加配置,指定自定义用户模型
AUTH_USER_MODEL = "你的应用名称.etudiant"
  1. 执行数据库迁移后,修改Views.py报错行
et = form.save()
et.save()   
group = Group.objects.get(name="etudiant") 
# 直接调用AbstractUser自带的groups字段添加用户组
et.groups.add(group)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:01