django - 将注册表信息链接到用户配置文件模型

django - linking the register form info to user profile model

我正在尝试制作一个包含 register/login 操作的网络应用程序。登录工作正常,但注册表单令人沮丧。

我有一个继承自 UserCreationForm 的 class 注册表单。用户是在创建时在管理页面中创建和看到的,但我遇到的问题是无法在管理页面的 UserProfile 模型中看到它们。它没有 link 信息,我找不到 link 的方法。

这是注册表:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

    class RegistrationForm(UserCreationForm):
        email = forms.EmailField(required=True)
        city = forms.CharField(required=False)
        country = forms.CharField(required=True)
        first_name = forms.CharField(required=True)
        last_name = forms.CharField(required=True)
        username = forms.CharField(required=True)

        class Meta:
            model = User
            fields = (
                'username',
                'first_name',
                'last_name',
                'country',
                'city',
                'email'
            )

            def save(self, commit=True):
                user = super(RegistrationForm, self).save(commit=False)
                #user.first_name = self.cleaned_data['first_name']

                if commit:
                    user.save()

                return user

这是我的模型:

class UserProfile(models.Model):
    user = models.OneToOneField( User,
                                on_delete=models.CASCADE
                                )
    username = models.TextField(max_length=30, default="")
    first_name = models.TextField(max_length=30, default="")
    last_name = models.TextField(max_length=30, default="")
    country = models.TextField(max_length=30, default="Which country are you from?")
    city = models.TextField(max_length=30, default="Which city are you from?")


class ColorChoice(models.Model):
    user = models.ForeignKey(
                            'UserProfile',
                            on_delete=models.CASCADE
                            )
    color1 = models.IntegerField()
    color2 = models.IntegerField()
    color3 = models.IntegerField()
    color4 = models.IntegerField()
    color5 = models.IntegerField()

我的 view.py 负责注册:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('color')
    else:
        form = RegistrationForm()

        args = {'form': form}
        return render(request, 'account/create_new.html', args)

您的 form 仅为 User 创建新对象。例如,您需要添加一个 signal 才能为 UserProfile.

创建一个新对象

像这样:

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
signals.post_save.connect(create_user_profile, sender=User)