Условные операторы в модели Flask - PullRequest
0 голосов
/ 25 января 2020

У меня есть три пользовательских типа, которые я собираюсь хранить в трех разных таблицах базы данных. Структура выглядит следующим образом:

  • A master таблица, содержащая столбцы id, teacher_userid, student_userid, parent_userid, role и несколько других столбцов.
  • A teacher таблица, содержащая сведения о пользователе учителя (включая учетные данные для входа в систему)
  • A student таблица, содержащая сведения о пользователе учащегося (включая учетные данные для входа в систему)
  • A parent таблица, содержащая сведения о родительском пользователе (включая учетные данные для входа в систему)

Причиной наличия трех отдельных таблиц является то, что данные, хранимые для каждой из них, будут совершенно разными, и кажется, что делать это таким образом чище .

Я хочу, чтобы пользователи любого типа могли входить через ту же форму в моем приложении Flask. flask-login должен найти таблицу master, которая затем должна извлечь данные из соответствующей таблицы teacher, student или parent для заполнения модели User.

Однако я в замешательстве о том, как условно заполнить модель User данными из других таблиц.

В идеале можно добавить что-то подобное в User(db.model):

if 'Teacher' in role:
  name = teacher.name
  email = teacher.email

elif 'Student in role:
  name = student.name
  email = student.email

И скоро. Однако представляется невозможным использовать такие условные операторы в определении класса User. Являются ли геттеры и сеттеры решением? Все это выглядит довольно грязно.

1 Ответ

0 голосов
/ 04 февраля 2020

Я бы посоветовал вам хранить общие поля данных - такие как учетные данные - в «основной» пользовательской таблице, и только поля с указанием роли c в таблицах учителя, родителей, учеников.

учителя Таблицы родитель, ученик должны иметь ссылку на таблицу пользователя.

Вы можете добавить свойства к своему классу пользователя flask -sqlalchemy, которые называются учитель, ученик и родитель, которые возвращают связанный учитель, ученик, родитель объекты (возможно, Учитель также может быть Родителем).

Эта модель позволяет вашему пользовательскому коду (например, имени входа) работать с объектами Пользователя, а код вашей роли c должен выполняться с указанными ролями c объектов.

...