Создайте профиль пользователя или другой объект Django автоматически.
Я установил базовый сайт 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)
в верхней части каждого из моих взглядов. Однако это никогда не перенаправляет пользователя на создание профиля.
Есть ли лучший способ обеспечить, чтобы Пользователь был вынужден создать объект профиля выше?
Похоже, вы пытаетесь сделать что-то похожее на 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