注册视图中的表单处理为具有多个值的 'CreateView'

form handling in Signup view as 'CreateView' with multiple values

我有 'Profile' 个型号:

class Profile(models.Model):
    user = models.OneToOneField(User, related_name='user')
    nickname = models.CharField(max_length=100, name='nickname')
    avatar = models.FileField()

    def __str__(self):
        return self.nickname

    def date_joined(self):
        return self.user.date_joined

我有一个注册表单:

class SignUpForm(UserCreationForm):
    nickname = forms.CharField(label='nickname', max_length=100, help_text='Enter your nickname', required=True)
    avatar = forms.ImageField(label='Avatar', help_text='Upload your picture')

我想注册视图,通过给定的表单获取用户的个人资料,所以我创建了一个创建视图,如:

class SignUpView(CreateView):
    form_class = SignUpForm
    template_name = '[path_to_template]/signup.html'
    success_url = reverse_lazy('base')

但它不会为数据库中配置文件 table 中的同一用户创建配置文件,它只是创建用户。就好像没有 'Nickname' 或 'Avatar' 永远不会存在于表单中一样。我怎样才能获得关于 'User' 的额外信息并为 'User' 创建一个 'Profile'?

我找到了解决它的方法。我刚刚覆盖了 CreateView 中的 formValid 方法。正如 Bono 提到的那样

The moment you want to make a Profile, do you already have a User?

我刚刚保存了用户,然后为该用户创建了一个新的配置文件。