Chaque fois qu'une nouvelle instance d'utilisateur est créée, je souhaite créer une instance de profil qui lui est liée. Pour ce faire, j'essaie d'utiliser des signaux.Le signal de post-sauvegarde n'est pas appelé dans Django
est ici le code de models.py:
@receiver(post_save, sender=User)
def create_user_profile(sender,**kwargs):
print(sender)
Et voici de view.py:
@api_view(["POST"])
def register(request):
username = request.data.get("username")
first_name = request.data.get("first_name")
last_name = request.data.get("last_name")
email = request.data.get("email")
password1 = request.data.get("password1")
password2 = request.data.get("password2")
user = User.objects.create_user(username,email,password1)
if user:
user = authenticate(username=username, password=password1)
if not user:
return Response({"error": "Login failed"}, status=HTTP_401_UNAUTHORIZED)
token, _ = Token.objects.get_or_create(user=user)
return Response({"token": token.key})
Cependant, rien est imprimé à mon terminal lors de la création d'un nouvel utilisateur.
EDIT: Je déplacé la fonction à signals.py et édité apps.py mais il ne fonctionne toujours pas:
from django.apps import AppConfig
class AuthConfig(AppConfig):
name = 'auth'
verbose_name = 'Auth Application'
def ready(self):
from . import signals
et voici __init__.py
:
default_app_config = 'auth.apps.AuthConfig'
Quel est l'emplacement de votre fonction create_user_profile à l'intérieur de votre models.py – iklinac
@iklinac Juste en dessous de la classe de modèle Profile – dpstart
@dpstart Elle doit être soit en dessous du modèle utilisateur et non du modèle de profil, ou (comme je le préfère) doit être dans un fichier d'écoute séparé lié de manière appropriée via AppConfig – kushj