Я пытаюсь заполнить поле профиля пользователя при регистрации пользователя (я читал, что это не рекомендуется, но требуется для моего приложения)
model.py
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
twitter = models.CharField(max_length=50)
def create(sender, **kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create, sender=User)
view.py
def register(request):
if request.method == 'POST':
form = RegForm(request.POST)
if form.is_valid():
form.save()
return redirect('/home')
else:
form = RegForm()
args = {'form': form}
return render(request, 'home/registration_form.html', args)
form.py
class RegForm(UserCreationForm):
email = forms.EmailField(required=True)
username = forms.CharField(max_length=50, required=True)
twitter = forms.CharField(max_length=50, required=True)
class Meta:
model = User
fields = (
'username',
'twitter',
'first_name',
'last_name',
'email',
'password1',
'password2'
)
def save(self, commit=True):
user = super(RegForm, self).save(commit=False)
user.username = self.cleaned_data['username']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
user.userprofile.twitter = self.cleaned_data['twitter']
if commit:
user.save()
return user
В настоящее время я получаю сообщение об ошибке «У пользователя нет профиля пользователя»
(впервые с использованием Djangoизвините, если это глупый вопрос, я не смог найти ничего, что помогло бы онлайн)
Traceback:
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 / site-packages / django / db / backends / utils.py "в _execute 85. вернуть self.cursor.execute (sql, params)
File" /Library/Frameworks/Python.framework/Версии / 3.6 / lib / python3.6 / site-packages / django / db / backends / sqlite3 / base.py "в execute 298. return Database.Cursor.execute (self, query, params)
Theвышеприведенное исключение (ограничение NOT NULL не выполнено: app_userprofile.user_id) было прямой причиной следующего исключения:
File "/Library/Frameworks/Python.framework / Versions / 3.6 / lib / python3.6 / site-packages / django / core / handlers / exception.py "во внутреннем 34. response = get_response (запрос)
File" / Library / Frameworks / Python.framework / Versions / 3.6 / lib / python3.6 / site-packages / django / core / handlers / base.py "в _get_response 126. response = self.process_exception_by_middleware (e, request)
File" /Библиотека / Каркасы / Python.framework / Версии / 3.6 / lib / python3.6 / site-packages / django / core / handlers / base.py "в _get_response 124. response = wrapped_callback (запрос, * callback_args, ** callback_kwargs)
Файл "/Users/IS/Desktop/Project/website/app/views.py" в реестре 37. form.save ()
Файл "/ Users / IS / Desktop / Project /website / app / form.py "в save 42. profile.save ()
File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db / models / base.py "в save 718. force_update = force_update, update_fields = update_fields)
Файл" /Library/Frameworks/Python.framework/Versions/3.6 / lib / python3.6 / site-packages / django / db / models / base.py "в save_base 748. updated = self._save_table (raw, cls, force_insert, force_update, using, update_fields)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py" в _save_table 831. result = self._do_insert (cls._base_manager, используя, поля, update_pk, raw)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py" в _do_insert869. using = using, raw = raw)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/manager.py"в manager_method 82. вернуть getattr (self.get_queryset (), name) (* args, ** kwargs)
File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/query.py "в _insert 1136. вернуть query.get_compiler (using = using) .execute_sql (return_id)
File" /Library/Frameworks/Python.framework / Versions / 3.6 / lib / python3.6 / site-packages / django / db / models / sql / compiler.py "в execute_sql 1289. cursor.execute (sql, params)
Файл" / Библиотека/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py "в execute 100. вернуть super (). Execute (sql, params)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py" в execute 68. вернуть self._execute_with_wrappers (sql, params,many = False, executor = self._execute)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py"в _execute_with_wrappers77. вернуть исполнителя (sql, params, many, context)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py" в _execute
85. вернуть self.cursor.execute (sql, params)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/utils.py" в выход
89. повысить dj_exc_value.with_traceback (traceback) из exc_value
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py" в _execute
85. вернуть self.cursor.execute (sql, params)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py" в исполнении
298. return Database.Cursor.execute (self, query, params)
Тип исключения: IntegrityError в / app / register /
Значение исключения: ограничение NOT NULL не выполнено: app_userprofile.user_id