Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 非空约束失败:app\u userprofile.user\u id_Python_Django - Fatal编程技术网

Python 非空约束失败:app\u userprofile.user\u id

Python 非空约束失败:app\u userprofile.user\u id,python,django,Python,Django,我是django的新手,正在尝试学习如何用它制作一个简单的应用程序。我确实设法在同一视图功能中获得了登录注册。然而,当我开始添加模型和表单时,我把它搞砸了,我真的不明白哪里出了问题。我花了一天的时间寻找解决方案,但就是想不出来。有什么帮助吗 models.py class UserProfile(models.Model): user = models.OneToOneField(User) def __unicode__(self):

我是django的新手,正在尝试学习如何用它制作一个简单的应用程序。我确实设法在同一视图功能中获得了登录注册。然而,当我开始添加模型和表单时,我把它搞砸了,我真的不明白哪里出了问题。我花了一天的时间寻找解决方案,但就是想不出来。有什么帮助吗

models.py

    class UserProfile(models.Model):
        user = models.OneToOneField(User)

        def __unicode__(self):
            return self.user.username

    class Posts(models.Model):
        content = models.CharField(max_length=150)
        user = models.ForeignKey(UserProfile)
        creation_date = models.DateTimeField(auto_now=True, blank=True)
forms.py

class UserSignUpForm(forms.ModelForm):
    username = forms.CharField(required=True, widget=forms.widgets.TextInput(attrs={'placeholder': 'Username', 'class' : 'username'}))
    password = forms.CharField(required=True, widget=forms.widgets.PasswordInput(attrs={'placeholder': 'Password', 'class' : 'password'}))

    def is_valid(self):
        form = super(UserSignUpForm, self).is_valid()
        for f, error in self.errors.items():
            if f != '__all_':
                self.fields[f].widget.attrs.update({'class': 'error', 'value': strip_tags(error)})
        return form

    class Meta:
        model = UserProfile
        fields = ('username', 'password',)

class PostsForm(forms.ModelForm):
    posts = forms.CharField(max_length=150, widget=forms.widgets.TextInput(attrs={'placeholder': 'What\'s in your mind?'}))

    class Meta:
        model = Posts
        fields = ('posts',)
views.py

    def index(request):
            if request.user.is_authenticated():
                    user = request.user
                    return render(request, 'userHome.html', {
                            'user': user,
                            'posts' : posts
                           })

            return render(request, 'userHome.html')

    def signup(request):
            context = RequestContext(request)
            registered = False

            if request.method == 'POST' and 'signIn' in request.POST:
                    username = request.POST['username']
                    password = request.POST['password']

                    user = authenticate(username=username, password=password)

                    if user is not None:
                            if user.is_active:
                                    login(request, user)
                                    return redirect(index)
                            else:
                                    return redirect(signup)
                    else:
                            return HttpResponse('invalid user')

            if request.method == 'POST' and 'signUp' in request.POST:
                    form = UserSignUpForm(request.POST)
                    if form.is_valid():
                            user = form.save(commit=True)
                            user.set_password(user.password)
                            user.save()
                            return redirect(index)
                    else:
                            return HttpResponse('this username already exist')

            else:
                    form = UserSignUpForm()

            return render(request, 'login.html', {
                    'form' : form,
                    'registered' : registered
            }, context)

    def posts(request):
            if request.user.is_authenticated():
                    user = request.user
                    return render(request, 'userHome.html', {
                          'user': user,
                           })
完全回溯

    Environment:


    Request Method: POST
    Request URL: http://127.0.0.1:8000/signup

    Django Version: 1.10.5
    Python Version: 3.5.2
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'app']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']



    Traceback:

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py" in execute
      337.         return Database.Cursor.execute(self, query, params)

    The above exception (NOT NULL constraint failed: app_userprofile.user_id) was the direct cause of the following exception:

    File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
      39.             response = get_response(request)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
      187.                 response = self.process_exception_by_middleware(e, request)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
      185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

    File "/Users/user/lsProject/ls/app/views.py" in signup
      45.                         user = form.save(commit=True)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/forms/models.py" in save
      453.             self.instance.save()

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/base.py" in save
      796.                        force_update=force_update, update_fields=update_fields)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/base.py" in save_base
      824.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/base.py" in _save_table
      908.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/base.py" in _do_insert
      947.                                using=using, raw=raw)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method
      85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/query.py" in _insert
      1045.         return query.get_compiler(using=using).execute_sql(return_id)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/models/sql/compiler.py" in execute_sql
      1054.                 cursor.execute(sql, params)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
      79.             return super(CursorDebugWrapper, self).execute(sql, params)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/utils.py" in __exit__
      94.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/utils/six.py" in reraise
      685.             raise value.with_traceback(tb)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/utils.py" in execute
      64.                 return self.cursor.execute(sql, params)

    File "/Applications/anaconda/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py" in execute
      337.         return Database.Cursor.execute(self, query, params)

    Exception Type: IntegrityError at /signup
    Exception Value: NOT NULL constraint failed: app_userprofile.user_id
更新

我发现了这个错误,我不知道它是一个bug还是书中的一个打字错误(书中说要使用models.py中声明的模型),我用它来学习Django。错误的格式为.py。如果我使用:

Class Meta:
    user = UserProfile
它向我抛出空错误,但将其更改为用户不会!然而,我使用这种方式创建用户,它与UserProfile一起工作

if user_form.is_valid():
                    user = User.objects.create_user(
                          username=user_form.cleaned_data['username'],
                          password=user_form.cleaned_data['password'],)
                    user.save()
                    return redirect(index)

如果有人能用简单的话解释一下原因,那就太好了。

你能发布完整的回溯吗?听起来好像你想把一个字段设置为null,但是你没有任何字段允许
null=True
@jape谢谢你的回答。在保存表单集commit to False时,我已更新了注册中的完整回溯。我尝试了这种方式,但没有成功。