注册后的表格未提交 Django

Form after registration is not submitting Django

要完成注册,我希望用户完成辅助表单。但是二级表格没有提交。我认为用户未在注册中获得身份验证,因此未提交辅助表单。 login() 似乎不起作用。

# the form in this view that's not submitting
def agreements(request):
    if request.method == "POST":
        form = AgreementsForm(request.POST)
        if form.is_valid():
            user = request.user
            agree = form.save(commit=False)
            agree.save()
        else:
            raise ValidationError("Form is not valid. Try Again.")
    else:
        form = AgreementsForm()
    return render(request, 'agree.html', {'form': form})

这是协议的 forms.py:

class AgreementsForm(forms.ModelForm):
    non_ent=forms.BooleanField(label='kdmkl kdldsk')
    agreement1=forms.BooleanField(label='dmklsd. lkdfmld')

    class Meta:
        model = Agreements
        fields = ('non_ent', 'agreement1')

    def save(self, commit=True):
        agree = super(AgreementsForm, self).save(commit=False)
        agree.non_ent = self.cleaned_data['non_ent']
        agree.agreement1 = self.cleaned_data['agreement1']
        if commit:
            agree.save()
        return agree

这是初始注册视图:

# register view which submits, but I think it's not authenticating the user
def registration(request):
    if request.method == "POST":
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = True
            user.save() 
            login(request, user, backend='django.contrib.auth.backends.ModelBackend')
            return redirect('agreements_page')             
        else:
            raise ValidationError("Form is not valid. Try Again.")
    else:
        form = CustomUserCreationForm()
return render(request, 'register.html', {'form': form})

协议模型:

class Agreements(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,blank=True, null=True)
    non_ent = models.BooleanField(default=False, blank=True, null=True)
    agreement1 = models.BooleanField(default=False, blank=True, null=True)
    date = models.DateTimeField(default=datetime.now, blank=True, null=True)

    def __str__(self):
        return f'{self.user} ({self.date})'

您需要先对用户进行身份验证才能登录: def 注册(请求):

 if request.method == "POST":
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = True
            user.save() 
            # authenticate user first
            user = authenticate(request,username=form.cleaned_data['username'],password=form.cleaned_data['password'])
            if user:
               login(request, user)
               return redirect('agreements_page')  

然后在您的辅助表单中,您可以像这样保存 request.user。 我希望您在 Agreement 模型中与用户有 OneToOne 关系。

 form = AgreementsForm(request.POST)
        if form.is_valid():
            agree = form.save(commit=False)
            agree.user = request.user
            agree.save()