Ich versuche, eine Registrierungsseite einzurichten, und ich habe ein Modell CafeUser, das als das Profil für das Benutzermodell dient. Ich habe ein Tutorial verwendet, um einen Signalempfänger einzurichten, so dass ich einen CafeUser für alle neuen registrierten Benutzer erstellen konnte.Django 1.10 IntegrityError auf Register
models.py:
class CafeUser(models.Model):
user = models.ForeignKey(User, unique=True, related_name="cafeuser")
phone_number = models.CharField(max_length=15)
birth_date = models.DateField('birthdate')
def __str__(self):
return self.user.first_name + " " + self.user.last_name
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
CafeUser.objects.create(user=instance)
views.py:
def register(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.cafeuser.birth_date = form.cleaned_data.get('birth_date')
user.cafeuser.phone_number = form.cleaned_data.get('phone_number')
user.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=user.username, password=raw_password)
login(request, user)
return redirect('cafe:index')
else:
form = SignUpForm()
return render(request, 'cafe/register.html', {'form': form})
forms.py
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
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.')
birth_date = forms.DateField(help_text='Rquired.')
phone_number = forms.CharField(max_length=15)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',)
Wenn ich die Registrierung versuchen zu testen, wird der Benutzer erstellt, jedoch der CafeUser ist nicht:
IntegrityError at/register/null Wert in der Spalte "birth_date" verletzt Nicht-Null-Bedingung DETAIL: Failing Zeile enthält (7, 8, null,).
register.html:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="submit">Register</button>
</form>
Bitte lassen Sie mich wissen, wie diese zu beheben und alle anderen Tipps, die Sie könnten zur Verbesserung dieser Einheit von Code.
Können Sie bitte das Formular Teil der HTML-Post? Es klingt wie Geburtsdatum wird nicht ordnungsgemäß gesendet. – Shadow
Was ist das Ergebnis von 'form.cleaned_data.get ('birth_date')' '? Ich denke, es gibt 'Null'-Wert, deshalb erhalten Sie diesen Fehler –
Es ist besser, zusätzliche Informationen zu der tatsächlichen Frage hinzufügen, anstatt durch Kommentare :) – Shadow