Привязка данных к учетной записи пользователя

Я пишу форму регистрации для моего сайта на django. В основном я хочу, чтобы они нажали кнопку submit и создали учетную запись. Я написал код, который создает лицензионный ключ, когда они нажимают кнопку, но я не знаю, как привязать его к их учетной записи. Есть идеи?

from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import SignupForm
from Functions.average_getter_shortened import baseline
from Functions.today_checker import today_getter
from Functions.license_key import license_getter
def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            try:
                license_key = license_getter(access_key='access_key')
            except:
                license_key = 'Key'
            login(request, user)
            return render(request, r'registration\license_key.html', {'license_key' : license_key})
    else:
        form = SignupForm()
    return render(request, r'registration\signup.html', {'form': form})

Я попытался реализовать user.save() после оператора except, но тогда сайт не перенаправлялся на страницу license_key

Существует множество примеров, но я сделал вот что. Я создал модель «Профиль», а затем привязал ее к записи пользователя. Это избавляет меня от необходимости работать с записью пользователя и в то же время позволяет хранить/отслеживать все, что я хочу, привязываясь к учетной записи пользователя. Когда пользователь создается, он автоматически генерирует запись профиля с настройками по умолчанию... и автоматически предоставляет доступ к группе. Мне нужно доработать способ идентификации группы лучше, чем использование PK, но пока это работает достаточно хорошо. Хотя это может не решить конкретно вашу проблему, я думаю, что структура/процессы могут быть легко адаптированы для выполнения того, что вы хотите сделать.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    discipline_assessed = models.BooleanField(default=False, verbose_name='Assessed?')
    allow_skills = models.BooleanField(default=False, verbose_name='Allow Access To Skills Matrix Tool?')
    def __str__(self):
        return self.user.username
    class Meta:
        ordering = ['user',]
@receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        try:
            if created:
                Profile.objects.create(user=instance)
                instance.groups.add(Group.objects.get(id=1))
                instance.save()
        except Exception as err:
            print('Error creating user profile!')
@receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

Я просто использовал обычную модель пользователя и сохранил в ней лицензионный ключ

from django.shortcuts import render, redirect
from django.contrib.auth import login
from .forms import SignupForm
from Functions.average_getter_shortened import baseline
from Functions.today_checker import today_getter
from Functions.license_key import license_getter
from accounts.models import CustomUser
def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            try:
                license_key = license_getter(access_key='access_key')
            except:
                license_key = 'Key'
            user.license_key = license_key
            user.save()
            login(request, user)
            return render(request, r'registration\license_key.html', {'license_key' : license_key})
    else:
        form = SignupForm()
    return render(request, r'registration\signup.html', {'form': form})
Вернуться на верх