RelatedObjectDoesNotExist в / signup /. У пользователя нет профиля - PullRequest
0 голосов
/ 31 января 2020

Я получаю сообщение об ошибке при регистрации, оно выдает ошибку, связанную сOffjectDoesNotExist в / signup /. У пользователя нет профиля.

Я получаю сообщение об ошибке при регистрации, оно выдает ошибку, связанную сOffjectDoesNotExist в / signup /. У пользователя нет профиля.

RelatedObjectDoesNotExist в / signup /. У пользователя нет профиля.

models.py

class Profile(models.Model):
    """
    Model that represents a profile.
    """
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='profile', on_delete=models.CASCADE)
    dp = models.ImageField(upload_to='dps/', blank=True, null=True)
    member_since = models.DateTimeField(default=timezone.now)
    email_confirmed  = models.BooleanField(default=False)

    class Meta:
        ordering = ('-member_since', )

    def __str__(self):
        """Unicode representation for a profile model."""
        return self.user.username

    def screen_name(self):
        """Returns screen name."""
        try:
            if self.user.get_full_name():
                return self.user.get_full_name()
            else:
                return self.user.username
        except:  # noqa: E722
            return self.user.username

    def get_picture(self):
        """Returns profile picture url (if any)."""
        default_picture = settings.STATIC_URL + 'admin/staff/default.jpg'
        if self.dp:
            return self.dp.url
        else:
            return default_picture

forms.py

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=100, )
    username = forms.CharField(label='Username', max_length=30, min_length=1,
                              )

    class Meta:
        model = User
        fields = ('username', 'email',)

views.py

def signup(request):
    form_filling = True
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()

            current_site = get_current_site(request)
            subject = 'Verify Your Deebaco Account'
            message = render_to_string('account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)

            return redirect('account_activation_sent')
    else:
        form = SignUpForm()
    return render(request, 'registration/register.html', {'form': form, 'form_filling': form_filling})


def account_activation_sent(request):
    return render(request, 'account_activation_sent.html')


def activate(request, uidb64, token, backend='django.contrib.auth.backends.ModelBackend'):
    try:
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except (TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.profile.email_confirmed = True
        user.save()
        login(request, user, backend='django.contrib.auth.backends.ModelBackend')
        messages.success(
                request, "Thanks for confirming your email address.", extra_tags='alert alert-success alert-dismissible fade show')
        return redirect('/')
    else:
        return render(request, 'account_activation_invalid.html')


tokens.py

from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.utils import six

class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
    def _make_hash_value(self, user, timestamp):
        return (
            six.text_type(user.pk) + six.text_type(timestamp) +
            six.text_type(user.profile.email_confirmed)
        )

account_activation_token = AccountActivationTokenGenerator()

1 Ответ

0 голосов
/ 31 января 2020

я сделал небольшие изменения в моем файле models.py, тогда он работает.

@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    """
    Signals the Profile about User creation.
    """
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...