Итак, мне удалось создать регистрацию и логин для пользователей. Я создал два вида групп, одна с ограничениями и одна без ограничений. В основном я буду управлять администратором в панели администратора, я добавлю пользователей в одну группу вместо другой, поэтому здесь нет проблем. Моя проблема в том, что когда новый пользователь регистрируется в моей панели администратора, он попадает только в мой раздел «Пользователи» и не будет автоматически связан с созданным мною «профилем пользователя» модели. Поэтому мне придется вручную добавить пользователя в «Модель». Как я могу сделать так, чтобы пользователь автоматически ассоциировался с этим классом, чтобы он / она настраивал свою фотографию профиля и т. Д.?
accounts / forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class FormRegistrazione(UserCreationForm):
email = forms.CharField(max_length=30, required=True, widget=forms.EmailInput())
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
accounts / models.py
from django.db import models
from django.contrib.auth.models import User
# from django.db.models.signals import post_save
# from django.dispatch import receiver
class UserProfile(models.Model):
user= models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
CV = models.FileField(null= True, blank=True)
school = models.CharField(max_length=200, null=True)
profile_photo = models.ImageField(null= True, blank=True)
def __str__(self):
return self.name
accounts / views.py
from django.shortcuts import render, HttpResponseRedirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from accounts.forms import FormRegistrazione
# from .decorators import allowed_user
# Create your views here.
def registrazioneView(request):
if request.method == "POST":
form = FormRegistrazione(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
User.objects.create_user(username=username, password=password, email=email)
user = authenticate(username=username, password=password)
login(request, user)
return HttpResponseRedirect("/")
else:
form = FormRegistrazione()
context = {"form": form}
return render(request, 'accounts/registrazione.html', context)
core / views.py
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.list import ListView
from .decorators import allowed_user
# Create your views here.
from quiz.models import Questions
from jobs.models import post_job
from functools import wraps
# @allowed_user(allowed_roles=['Admin', 'Students'])
def homepage(request):
return render(request, 'core/homepage.html')
@allowed_user(allowed_roles=['Admin','Students'])
def userProfileView(request, username):
user= get_object_or_404(User, username=username)
jobs = post_job.objects.all()
categories = Questions.CAT_CHOICES
scores = []
for category in categories:
score = Questions.objects.filter(catagory=category[0], student= user).count()
scores.append(score)
context = {
'user' : user, 'categories_scores' : zip( categories,scores),
'jobs': jobs
}
return render(request, 'core/user_profile.html' , context)
class UserList(LoginRequiredMixin, ListView):
model = User
template_name = 'core/users.html'
core / decorators.py
from django.http import HttpResponse
from django.shortcuts import redirect, render
from functools import wraps
# def allowed_user(allowed_roles=[]):
# def decorator(view_func):
# def wrapper_func(request, *args, **kwargs):
#
# group = None
# if request.user.groups.exists():
# group = request.user.groups.all()
#
# if group in allowed_roles:
# return view_func(request, *args, **kwargs)
#
# else:
# return HttpResponse(' You are not Authorized!')
# return wrapper_func
# return decorator
def allowed_user(allowed_roles=()):
def decorator(view_func):
@wraps(view_func)
def wrapper_func(request, *args, **kwargs):
if request.user.groups.filter(name__in=allowed_roles).exists():
return view_func(request, *args, **kwargs)
else:
return render(request, 'core/render_staff.html' )
return wrapper_func
return decorator