Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未使用django中的obj.save()保存模型_Python_Django_Django 2.0 - Fatal编程技术网

Python 未使用django中的obj.save()保存模型

Python 未使用django中的obj.save()保存模型,python,django,django-2.0,Python,Django,Django 2.0,我将此模型作为内置用户模型的扩展: class userprofile(models.Model): phone = models.CharField(max_length=20) address = models.CharField(max_length=500) user = models.OneToOneField(User, on_delete=models.CASCADE) @receiver(post_save, sender=User)

我将此模型作为内置用户模型的扩展:

class userprofile(models.Model):

    phone = models.CharField(max_length=20)
    address = models.CharField(max_length=500)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            userprofile.objects.create(user=instance)

    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.userprofile.save()
用于创建这些模型的django form类包括:

class UserRegister(forms.Form):

    first_name = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'First Name'}))
    last_name = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Last Name'}))
    username = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Username'}))
    email = forms.EmailField( required=True, widget=forms.widgets.EmailInput(attrs={'placeholder': 'Email'}))
    password =forms.CharField(required=True, widget=forms.widgets.PasswordInput())
    confirm_password =forms.CharField(required=True, widget=forms.widgets.PasswordInput())

    class Meta:
        model=User
        fields=['first_name','last_name','username','email','password','confirm_password']




   def clean(self):
        cleaned_data = super(UserRegister, self).clean()
        password = cleaned_data.get("password")
        confirm_password = cleaned_data.get("confirm_password")
        if password != confirm_password:
            raise forms.ValidationError(
                "password and confirm_password does not match"
            )



class UserProfileCreate(forms.Form):
    mobile = forms.CharField(required=True, widget=forms.widgets.NumberInput(attrs={'placeholder': 'Mobile No.'}))
    address = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Delivery address'}))

    class Meta:
        model= userprofile
        fields=['mobile', 'address']
HTML类似于:

<form class="form-horizontal" method="POST" action="{% url 'createuser' %}">



                            {% csrf_token %}



                           {% for hidden in form.hidden_fields %}
                              {{ hidden }}
                            {% endfor %}

                            {% for field in form.visible_fields %}
                              <div class="form-group">
                                <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                                {{ field|add_class:'form-control' }}
                                {% for error in field.errors %}
                                  <span class="help-block">{{ error }}</span>
                                {% endfor %}
                              </div>
                            {% endfor %}

                            {% for field in formplus.visible_fields %}
                              <div class="form-group">
                                <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                                {{ field|add_class:'form-control' }}
                                {% for error in field.errors %}
                                  <span class="help-block">{{ error }}</span>
                                {% endfor %}
                              </div>
                            {% endfor %}

                            <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Register
                                </button>
                            </div>
                        </div>
                    </form>
我在学习了一些django教程之后做了这件事。我没有在任何地方看到任何不正确的代码,但我无法将这样提交的表单保存为模型。我没有在views.py中执行
userprofile.save()
,因为它是通过OneToOneField连接到用户的,我提到了在创建用户时自动创建userprofile


不会引发任何错误,也不会创建帐户。你们能略过一下吗

这里有几个问题。主要原因是您的用户表单无效。但是,您没有将无效表单传递回模板,因此您永远看不出它为什么无效。您应该传递已经创建的实例,而不是传递类

return render(request, 'userextension/usercreate.html', {'form' : user, 'message': 'Could not create account'})
第二个问题是,您从未对配置文件表单执行任何操作—您没有检查它是否有效,也没有保存它


还请注意,在成功发布后,您应该始终重定向。

是否检查了
user.is\u valid()
是否实际返回
True
?我认为不会,因为您在
字段中缺少
确认密码
,但该字段是必需的。我认为该字段将包含模型本身中存在的字段,但我错了。谢谢你。但是,即使我在字段中添加了确认密码,问题仍然是一样的。谢谢你的回复。我很难弄清楚如何将无效表单重定向回模板。请你在这方面再加一点说明好吗。另外,我没有保存UserProfile实例,因为它是通过OneToOneField与用户链接的,并且在创建用户时自动创建的,我在其模型中提到了这一点。我不明白,我向您展示了如何将无效表单传递回模板。哎呀,我的错。很抱歉给您添麻烦。看起来我也犯了一些其他愚蠢的错误,但是我上面问题的核心问题是通过重定向当前实例来解决的。因此,我将此标记为已接受。谢谢,伙计
return render(request, 'userextension/usercreate.html', {'form' : user, 'message': 'Could not create account'})