繁体   English   中英

在 Django 管理员中以一对多关系更改“一个”Model 的默认功能

[英]Change Default Functionality Of 'One' Model In One-To-Many Relationship In Django Admin

我有一对多的关系。

class User(AbstractUser):
    user_type = models.CharField(choices=USER_TYPES, max_length=255, default='student')

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    
class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='students', default=None, null=True)

当我 go 进入 Django 管理员的学生时,我有一个下拉框,可以 select 他们的老师。 这很好。 但是,当我将 go 变成教师时,而不是学生的下拉框,我得到一个“添加另一个用户”按钮,其中包含所有用户的下拉列表。 单击学生并按“保存”会引发以下错误

Student with this User already exists.

如何从教师页面中删除“添加其他用户”并将其替换为所有学生(或尚未分配教师的学生)的下拉列表?

谢谢你。

当我将 go 变成教师时,而不是学生的下拉框,我得到一个“添加另一个用户”按钮,其中包含所有用户的下拉列表。

是的,这是正确的,因为学生变量名称不可用于教师类的字段。 如果定义在顶部引用的类,则需要使用字符串(例如,'Student'); 但是,外键仅在关系的一侧定义。

您可以使用的选项之一是ManyToManyField ,您将拥有三个类,其中一个类使用through字段。 您需要通过定义层次结构来定义自引用外键,在用户 class 中,使用字符串self.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM