I'm trying to evaluate a situation here. I have a custom user Model (Using AbstractUser) that contains an extra field called 'role'. I can access the value of this field in views.py
using a variable. Now I want to use that variable to check for a condition in signals.py
before executing post_save
.
Here are my code snippets so far.
views.py
from django.shortcuts import render, redirect
from .forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm
from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test, login_required
# Create your views here.
@user_passes_test(lambda u: u.is_superuser)
def register(request):
if request.method == 'POST':
register_form = UserRegisterForm(request.POST)
if register_form.is_valid():
register_form.save()
username = register_form.cleaned_data.get('username')
role = register_form.cleaned_data.get('role') //**This is the variable**
messages.success(request, f'Welcome {username}, thank you for signing up.')
return redirect('home')
else:
register_form = UserRegisterForm()
context = {
'register_form' : register_form,
'title' : 'Register'
}
return render(request, 'users/register.html', context)
signals.py
from django.db.models.signals import post_save
from django.conf import settings
from django.contrib.auth import get_user_model
from django.dispatch import receiver
from .models import Teacher
User = get_user_model()
@receiver(post_save, sender=User)
def create_teacher(sender, instance, created, **kwargs):
if created:
if hasattr(instance, 'role') and role == 'teacher': //Here is the condition
Teacher.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_teacher(sender, instance, **kwargs):
instance.teacher.save()
Can someone please help me on how to go about it? Thanks
You make this much harder than it needs to be. Just create the teacher in the view.
if register_form.is_valid():
instance = register_form.save()
username = register_form.cleaned_data.get('username')
role = register_form.cleaned_data.get('role')
if role == 'teacher':
Teacher.objects.create(user=instance)
messages.success(request, f'Welcome {username}, thank you for signing up.')
return redirect('home')