Если я точно понимаю вашу проблему, мой выбор будет OneToOneField
.
Когда я работаю над проектами, в которых клиентам нужны настроенные пользователи, одним из лучших решений является создание новой модели с OneToOneField
, указывающим на пользователя Django, как модель Profile
. Когда у вас есть объект User
, вы можете сделать user.profile
и получить профиль, связанный с пользователем (так что вы можете сделать user.profile.any_profile_field
).
Я рекомендую вам использовать такое решение, потому что оно простое в управлении и масштабируемое. Если через 1 месяц вам нужно добавить новое свойство/поле/значение для пользователя, с этим решением вам нужно только изменить эту новую модель.
Здесь вы можете добавить в модель профиля столько полей, сколько вам нужно, и этим легко управлять, потому что если у вас есть пользователь, у вас есть профиль, и наоборот.
class Profile(models.Model):
USER_TYPE_CHOICES = (
('s', 'Student'),
('t', 'Teacher' ),
)
user = models.OneToOneField(User)
type_user = models.CharField(max_length=20, default='s',choices=USER_TYPE_CHOICES)
# ... ... ...
# Your fields here
РЕДАКТИРОВАТЬ
Если вы используете это, ваш метод authenticate
может остаться таким же, как и сейчас.
Вы можете сделать что-то, как в этом примере:
user = User.objects.all()[0] # Get the first user
user.profile # This would return the profile object
user.profile.type_user # This would return the type_user of the profile related with this user
Таким образом, вы можете использовать поля профиля в своей функции входа в систему или когда пользователь обращается к какому-либо URL-адресу, и проверять тип пользователя, разрешать или нет.
Пример управления шаблоном, в который могут входить только учителя:
def teacher_view(request):
if not request.user.is_authenticated:
# If user is not logged in, send it to login page
else:
if request.user.profile.type_user == 's': # If the user is student
# Here you can raise an error (not enough permissions), raise an error or redirect
person
AlvaroAV
schedule
01.12.2014