Итак, у меня есть две модели - модель пользователя по умолчанию и модель профиля, которая содержит больше информации. Пользователи могут зарегистрировать учетную запись, а затем войти в систему. Когда они входят в систему, она переносит их в профиль пользователя, а когда они нажимают на вкладку для редактирования профиля, она переносит их на другую страницу, которая позволяет им вводить дополнительную информацию. Когда вы нажимаете submit, выдает: NOT NULL ограничение не выполнено: groups_userprofile.user_id. Вот мой код:
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
##from django.db.models.signal import post_save
# Create your models here.
##adds additional info for each user
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
about_me = models.CharField(max_length=100, default='')
major = models.CharField(max_length=50, default='')
classes = models.CharField(max_length=500, default='')
image = models.ImageField(upload_to='profile_image', blank=True)
graduation_date = models.CharField(max_length=50, default='')
experience = models.CharField(max_length=50, default='')
contact = models.CharField(max_length=50, default='')
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile= UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender= User)
views.py
def addUser(request):
if request.method == 'POST':
form = RegisterForm(request.POST or None)
if form.is_valid():
print('valid')
form.save()
return redirect('home')
else:
print('not valid')
print(form.errors)
form = RegisterForm()
args = {'form': form}
return render(request, 'login_register/register.html', args)
@csrf_protect
def edit_profile(request):
if request.method == 'POST':
form = EditProfileForm(request.POST or None)
if form.is_valid():
print('valid')
form.save()
return redirect('profile')
else:
print('not valid')
print(form.errors)
form = EditProfileForm()
args = {'form': form}
return render(request, 'profile_page/profiles/edit_profile.html', args)
else:
print('none')
edit_profile. html
<!DOCTYPE html>
<html lang="en">
{% load static %}
{% include "includes/header.html" %}
<head>
<meta charset="UTF-8">
<title>Edit Profile</title>
</head>
<body>
{% block body %}
<form action= "{% url 'edit_profile' %}" method = 'post'>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="signin" id="signin" class="btn btn-primary" value="Log in"/>
</form>
{% endblock %}
</body>
</html>