Как настроить регистрацию и сигналы в django 2.0 - PullRequest
1 голос
/ 07 марта 2019

Может кто-нибудь помочь мне понять, что я делаю неправильно, пытаясь настроить аутентификацию и сигналы для работы с моделями, созданными в django 2.0.

models.py

from django.db import models
from django.conf import settings.AUTH_USER_MODEL
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    bio = models.TextField(foo)
    location = models.CharField(foo)


    # Override save method
    # Run after the method is saved to add signal functionality below
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    else:
        instance.profile.save()

forms.py

from django import forms
from django.contrib.auth import get_user_model
from django.forms import ModelForm
from .models import Profile

Profile = get_user_model()

class UserRegisterForm(forms.ModelForm):
    email = forms.EmailField(foo)
    first_name = forms.CharField(foo)
    last_name = forms.CharField(foo)
    password = forms.CharField(foo)
    password2 = forms.CharField(foo)

    class Meta:
        model = Profile
        fields = [
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        ]

views.py

from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model
from .forms import UserRegisterForm
from .models import Profile
from django.conf import settings

def register(request):
    next = request.GET.get('next')
    form = UserRegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get('password')
        user.set_password(password)
        user.save()
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        if next:
            return redirect(next)
        return redirect('accounts:login')

    context = {
        'form': form,
    }
    return render(request, "accounts/register.html", context)

Foo = просто заполнитель

Приведенный выше код создает пользователя, но не связанный с ним профиль.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 08 марта 2019

Вот видео с YouTube, которое я нашел, и оно объясняет наилучшим образом (я думаю) о создании пользователей с их профилем: Youtube Tutorial , Надеюсь, это помогло вам.

...