Джанго: Ключевые вопросы отношений DRF

Я столкнулся с проблемой при попытке создать модель, к которой другая модель имеет внешний ключ, и каждый раз, когда в модели создается экземпляр, модель, имеющая отношение к модели, должна обновляться, но я не думаю, что это хороший способ создания отношений

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')
Вернуться на верх