Создайте профиль пользователя или другой объект Django автоматически.

82
11

Я установил базовый сайт Django и добавил логин на сайт. Кроме того, я создал модель Student (Profile), которая расширяется после встроенного User one. Он имеет отношения OneToOne с пользовательской моделью.

Тем не менее, я еще не пришел, чтобы заставить пользователя автоматически создавать профиль при первом входе в систему. Как бы я удостоверился, что они не могут пройти через что-либо, не создавая этого?

Я попытался определить следующие в представлениях:

def UserCheck(request):
current_user = request.user
# Check for or create a Student; set default account type here
try:
profile = Student.objects.get(user = request.user)
if profile == None:
return redirect('/student/profile/update')
return True
except:
return redirect('/student/profile/update')

И после этого добавьте следующее:

UserCheck(request)

в верхней части каждого из моих взглядов. Однако это никогда не перенаправляет пользователя на создание профиля.

Есть ли лучший способ обеспечить, чтобы Пользователь был вынужден создать объект профиля выше?

спросил(а) 2016-10-10T01:20:00+03:00 3 года, 11 месяцев назад
1
Решение
71

Похоже, вы пытаетесь сделать что-то похожее на Django user_passes_test decorator (документация). Вы можете включить эту функцию:

# Side note: Classes are CamelCase, not functions
def user_check(user):
# Simpler way of seeing if the profile exists
profile_exists = Student.objects.filter(user=user).exists()
if profile_exists:
# The user can continue
return True
else:
# If they don't, they need to be sent elsewhere
return False

Затем вы можете добавить декоратор к вашим представлениям:

from django.contrib.auth.decorators import user_passes_test

# Login URL is where they will be sent if user_check returns False
@user_passes_test(user_check, login_url='/student/profile/update')
def some_view(request):
# Do stuff here
pass

ответил(а) 2016-10-10T01:46:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема