Я пытаюсь создать двухэтапную форму создания пользователя с помощью формы мастера django, у меня есть файл изображения, который идет в модель профиля, а все остальные данные идут в пользовательскую модель по умолчанию, это правильный путь делать это или я должен создать единую модель для всего. Не знаю точно, что я сделал не так. Я подозреваю, что моя вторая форма не знает, для какого пользователя она должна сохранить данные. Я новичок, поэтому, ребята, пожалуйста, помогите мне.
models.py
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, default=None, null=True, on_delete=models.CASCADE)
profilePic = models.ImageField(default='default.png', upload_to='profilePics')
def __str__(self):
return self.user.username
def save(self):
super().save()
img = Image.open(self.profilePic.path)
if img.height > 500 or img.width > 500:
outputSize = (500,500)
img.thumbnail(outputSize)
img.save(self.profilePic.path)
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from formtools.wizard.views import SessionWizardView
from .models import Profile
class UserRegisterForm(UserCreationForm):
email= forms.EmailField(required=True ,max_length=100,widget= forms.TextInput(attrs={'placeholder':'jane@example.com'}))
class Meta:
model = User
fields = ['username', 'email', 'password1' ]
widgets = {
'username': forms.fields.TextInput(attrs={'placeholder': 'the_jane'}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
del self.fields['password2']
class UserDetialsForm(forms.ModelForm):
firstName = forms.CharField(required=True, max_length=100, widget= forms.TextInput(attrs={'placeholder':'Jane'}))
lastName = forms.CharField(required=True, max_length=100, widget= forms.TextInput(attrs={'placeholder':'Doe'}))
class Meta:
model = User
fields = ['firstName', 'lastName']
class Meta:
model = Profile
fields = ['profilePic']
views.py
from django.shortcuts import HttpResponseRedirect, render, redirect, reverse
from django.core.files.storage import DefaultStorage
from django.forms.models import construct_instance
from .forms import *
from . models import Profile
# Create your views here.
def index(request):
return render(request, 'blog/index.html')
def home(request):
return render(request, 'blog/home.html')
def login(request):
form = UserLoginForm
context = {'form':form}
return render(request, 'blog/login.html', context)
class FormWizardView(SessionWizardView):
template_name = "blog/register.html"
form_list = [UserRegisterForm, UserDetialsForm]
file_storage = DefaultStorage()
instance = None
def get_form_instance( self, step ):
if self.instance is None:
self.instance = Profile()
return self.instance
def done(self, form_list, **kwargs):
self.instance.save()
return render(self.request, 'blog/home.html', {
'form_data': [form.cleaned_data for form in form_list],
})
это ошибка
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: blog_profile.user_id
[06/Mar/2020 19:16:32] "POST /register/ HTTP/1.1" 500 172958
https://drive.google.com/open?id=1MXIGfcuEM_jzovfdmzY5jHy5n5Lywcbc
если вам, ребята, нужно что-нибудь еще, пожалуйста, дайте мне знать.
спасибо .