Ошибка ограничения NOT NULL
Я продолжаю получать эту ошибку: "не нулевое ограничение не удалось: users_userprofile.ид_пользователя", когда я пытаюсь отправить форму
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)
Это forms.py: из форм импорта django от пользователей.модели импорт UserProfile из Джанго.ВНО.автор.модели импорт пользователя
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%}
спасибо заранее
EDIT:
ошибка была в views.py мне нужно было добавить экземпляр в форму, вот так:
form = UserProfileForm(data=request.POST, instance=profile)
Это мой полный 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})
1 ответов
проблема в том, что требуется пользователь в UserProfile, но вы не устанавливаете поле пользователя в UserProfileForm. База данных не получила user_id, поэтому она попыталась установить null в этом поле, но поле не имеет ограничения null. Вы можете установить null=True в определении поля в модели UserProfile или перезаписать метод формы save (или, возможно, is_valid), чтобы автоматически установить пользователя, или добавить поле пользователя в UserProfileForm, или что угодно, что вы хотите.
