Django:DRF关系关键问题

Django: DRF relationship key issues

我在尝试创建另一个模型具有外键的模型时遇到问题,每次在模型中创建实例时,与模型有关系的模型也需要更新,但我不要认为这是建立关系的好方法

class User(AbstractBaseUser, PermissionsMixin):
  ....
  #three fields pointing to one model
  owner = models.ManyToManyField(School, verbose_name=_(
    "Ownes"), related_name='owner', blank=True)

  workes_at = models.ForeignKey(School, verbose_name=_(
    "Workes at"), related_name='Workes_at', on_delete=models.PROTECT, blank=True, null=True)

  learns_at = models.ForeignKey(School, verbose_name=_(
    "Learns at"), related_name='learns_at', on_delete=models.PROTECT, blank=True, null=True)

这样我就遇到了上面提到的问题,因为当我想创建一个学校实例时,需要在用户模型上设置所有者 我还将这些字段放在学校模型中,但这意味着当我想根据用户上学、拥有或工作的学校过滤用户时,创建学生或工人将是一项艰巨的任务,我想知道什么如果将 3 个外键字段维护到同一个模型不是一个好主意,请推荐我做这种事情的推荐方法,如果这不是最好的方法,我必须在一个模型中处理三种类型的用户我如何处理具有不同字段的用户类型。提前致谢。

您可以为具有角色的用户创建 1 个带有外键的模型:

 class SchoolUser(AbstractBaseUser, PermissionsMixin):
     SCHOOL_ROLES = (
         ("general", "General"),
         ("learn", "Learn"),
         ("owner", "Owner")
     )
     role = models.CharField(choices=SCHOOL_ROLES)
     user = models.ForeignKey(User, on_delete=models.CASCADE)
     school = models.ForeignKey(School, on_delete=models.CASCADE)

user = User.objects.first()
school = School.objects.first()
school_user = SchoolUser()
school_user.user = user
school_user.school = school
school_user.role = 'learn'
school_user.save()

user = User.objects.first()
learns = user.schoooluser_set.filter(role='learn')
owners = user.schoooluser_set.filter(role='owner')