2014-11-04 9 views
6

Ich halte diesen Fehler: „NOT NULL fehlgeschlagen: users_userprofile.user_id“, wenn ich versuche, ein Formular abzuschickenNOT NULL fehlgeschlagen Fehler

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) 

Dies ist forms.py: von django import Formen von users.models Userprofile aus django.contrib.auth.models Import Benutzer importieren

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') 

Dies ist die Vorlage:

Dank vor Hand

EDIT:

Der Fehler in der views.py war ich brauchte eine Instanz Formular hinzuzufügen, wie folgt aus:

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

Das ist mein abgeschlossen ist 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}) 
+0

Können Sie Ihre Frage ein wenig klarer erläutern? –

+1

Es scheint, dass Sie bei der Verwendung von Formularen das Feld "Benutzer" angeben müssen. Aber ohne Ihren Code für das Formular zu sehen, kann ich nicht sicher sagen, was Ihr Problem ist. – Sadjad

Antwort

4

Problem ist, dass Benutzer in Userprofile erforderlich ist, aber Sie setzen nicht u ser-Feld in UserProfileForm. Die Datenbank hat user_id nicht erhalten, daher hat sie versucht, für dieses Feld null zu setzen, aber das Feld hat keine Null-Einschränkung. Sie können im UserProfile-Modell null = True für die Felddefinition festlegen oder die save (oder wahrscheinlich is_valid) -Formularmethode überschreiben, um den Benutzer automatisch festzulegen, oder das Benutzerfeld zu UserProfileForm hinzufügen, oder was auch immer Sie wollen.

+0

Danke !, Mein Fehler war in der views.py, ich hatte form = UserProfileForm (data = request.POST) und hinzugefügt form = UserProfileForm (data = request.POST, instance = profile) und es hat funktioniert, ich dachte, der Fehler war in den Formen oder etwas – AndyJRR

Verwandte Themen