NOT NULL约束失败错误 [英] NOT NULL constraint failed error

查看:387
本文介绍了NOT NULL约束失败错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不断得到这个错误:当我尝试提交表单时,NOT NULL约束失败:users_userprofile.user_id

I keep getting this error: "NOT NULL constraint failed: users_userprofile.user_id" when I try to submit a form

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    #Esta linea es requerira. Linkea UserProfile a un User model
    user = models.OneToOneField(User)

    #atributos adicionales
    about_me = models.TextField(max_length=100,default='',blank=True)
    experience = models.TextField(max_length=250,default='',blank=True)
    offers = models.TextField(max_length=110,default='',blank=True)

这是来自django的forms.py:
import forms
from users.models import UserProfile
from django.contrib.auth.models import User

This is the forms.py: from django import forms from users.models import UserProfile from django.contrib.auth.models import User

class UserForm(forms.ModelForm):
    password = forms.CharField(min_length=6,label='', widget=forms.PasswordInput(attrs={'placeholder': 'Password','required':'true','class':"form-control"}))
    username = forms.CharField(label='', min_length=6,
                    widget=forms.TextInput(attrs={'placeholder': 'Username','required':'true','class':"form-control",'autofocus':'true'}))
    email = forms.CharField(label='', 
                    widget=forms.TextInput(attrs={'placeholder': 'Email','required':'true','class':"form-control"}))

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

class UserProfileForm(forms.ModelForm):
    about_me = forms.CharField(label='', 
                    widget=forms.Textarea(attrs={'placeholder': 'Sobre mi','required':'true','class':"form-control"}))
    first_name = forms.CharField(label='', 
                    widget=forms.TextInput(attrs={'placeholder': 'Nombre','required':'true','class':"form-control"}))
    last_name = forms.CharField(label='', 
                    widget=forms.TextInput(attrs={'placeholder': 'Apellidos','required':'true','class':"form-control"}))
    experience = forms.CharField(label='', 
                    widget=forms.TextInput(attrs={'placeholder': 'Experiencia','required':'true','class':"form-control"}))
    offers = forms.CharField(label='', 
                    widget=forms.Textarea(attrs={'placeholder': 'Mensaje','required':'true','class':"form-control"}))

    class Meta:
        model = UserProfile
        fields =('first_name','last_name','about_me','experience','offers')

这是模板:

{%extends 'base.html'%}

{%block content%}
{% if user.is_authenticated %}
<h1>Edita tu perfil</h1>
<form id='profile' method='post' action='/edit_profile/'>
{% csrf_token %}

{{profile.as_p}}

<button type='submit'>Editar</button>
</form>
{%endif%}

{%endblock%}

感谢手头

编辑:

我在添加一个实例所需的views.py中出现错误如下所示:

The error was in the views.py I needed to add an instance to the form, like this:

form = UserProfileForm(data=request.POST, instance=profile)

这是我完整的views.py:

This is my complete views.py:

def edit_profile(request):
    try:
        profile = request.user.userprofile

    except UserProfile.DoesNotExist:

        profile = UserProfile(user=request.user)

    if request.method == 'POST':
        form = UserProfileForm(data=request.POST, instance=profile)

        if form.is_valid():

            form.save()

            return HttpResponse("Exito!")
        else:
            form = UserProfileForm(instance=profile)

    else:
        form = UserProfileForm()

    return render(request,
            'editprof.html',
            { 'form': form})


推荐答案

问题是UserProfile中的用户是必需的,但是您没有在UserProfileForm中设置用户字段。数据库没有获取user_id,所以它尝试在此字段上设置null,但是字段没有为null约束。您可以在UserProfile模型中的字段定义中设置null = True,或者覆盖保存(或可能是is_valid)表单方法自动设置用户,或将用户字段添加到UserProfileForm或任何您想要的内容。

Problem is that user in UserProfile is required, but you are not setting user field in UserProfileForm. Database didn't get user_id, so it tried to set null on this field, but field have not not null constraint. You can set null=True on field definition in UserProfile model, or overwrite save (or probably is_valid) form method to set user automatically, or add user field to UserProfileForm, or whatever what you want.

这篇关于NOT NULL约束失败错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆