Джанго: Ключевые вопросы отношений 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')