Ich versuche, eine einfache Anmeldungs-/Anmeldeseite durch django zu machen. Ich habe UserCreationForm verwendet und ein Model UserProfile verwendet, um das Benutzermodell zu erweitern. Als ich versuchte, die Post-Anfrage der Anmeldung zu speichern, gibt es den Integritätsfehler. Ich bin neu zu Django so kurze Erklärung würde geschätzt werden. Vielen Dank im VorausIntegrityError: NOT NULL Constraint fehlgeschlagen: core_userprofile.user_id
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from mysite.core.models import UserProfile
from django.db import models
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
department = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email','password1', 'password2', 'department',)
def save(self, commit=True):
# Save the provided password in hashed format
user = super(SignUpForm, self).save(commit=False)
user_profile = UserProfile(user=user, department=self.cleaned_data['department'])
user.save()
user_profile.save()
return user, user_profile
views.py
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate
from django.shortcuts import render, redirect
from mysite.core.forms import SignUpForm
@login_required
def home(request):
return render(request, 'home.html')
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user,user_profile = form.save(commit=False)
username = user.cleaned_data.get('username')
raw_password = user.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,unique=True)
department = models.CharField(max_length=500, blank=True)
Auf diese Weise erhalte ich die Fehlermeldung: /views.py“, Zeile 17, in der Registrierung username = user.cleaned_data.get ('username') Attribute: 'User' Objekt hat kein Attribut‚cleaned_data " –
Das ist ein separates Problem. Sie sollten das Formular verwenden, um die bereinigten Daten zu erhalten, zB' form.cleaned_data ['username'] '. – Alasdair
Danke für die Hilfe, letzte Sache, wie kann ich diese user_profile Daten in meiner Vorlage erhalten. Ich versuche mit user_profile.department, aber nicht in der Lage, es wiederherzustellen. –