Django ModelForm not retrieving field's value
我使用两个ModelForms创建一个配置文件实例的NA用户。配置文件模型窗体只有一个字段。我正在执行form.save(commit=false),设置表单中所需字段(country)以外的其他字段并保存。我收到一个错误,说"countryu id"不能为空。
型号.py
1 2 3 4 5 6 7 8 9 10 11 12 | class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) country = models.ForeignKey(Country, on_delete=models.CASCADE) bio = models.TextField(blank=True) avatar = models.ImageField(upload_to='avatars/', null=True, blank=True) email_confirmed = models.BooleanField(default=False) @receiver(post_save, sender=User) def update_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) instance.profile.save() |
表格.py
1 2 3 4 5 6 7 8 9 10 | class UserRegisterForm(UserCreationForm): class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] class ProfileRegisterForm(forms.ModelForm): class Meta: model = Profile fields = ['country'] |
号
视图.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | def register(request): if request.method == 'POST': user_form = UserRegisterForm(request.POST) profile_form = ProfileRegisterForm(request.POST) if user_form.is_valid() and profile_form.is_valid(): user = user_form.save(commit=False) user.is_active = False profile = profile_form.save(commit=False) profile.user = user user.save() current_site = get_current_site(request) subject = 'Activate Your 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('activation_email_sent') else: user_form = UserRegisterForm() profile_form = ProfileRegisterForm() return render(request, 'register.html', {'user_form': user_form, 'profile_form': profile_form}) |
是啊。我移除了
视图.py
1 2 3 4 5 6 7 8 9 10 11 12 | def register(request): if request.method == 'POST': user_form = UserRegisterForm(request.POST) profile_form = ProfileRegisterForm(request.POST) if user_form.is_valid() and profile_form.is_valid(): user = user_form.save(commit=False) user.is_active = False user.save() profile = profile_form.save(commit=False) profile.user = user profile.save() |