在用户注册时填充UserProfile

时间:2019-03-10 21:33:11

标签: django

我正在尝试在用户注册时填充“用户个人资料”字段(我读过不建议这样做,但是我的应用程序要求这样做)

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,很抱歉,如果这是一个愚蠢的问题,我找不到在线帮助的任何内容)

跟踪:

_execute中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   85. return 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)

上述异常(NOT NULL约束失败:app_userprofile.user_id)是以下异常的直接原因:

内部的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py”   34. response = get_response(request)

_get_response中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py”   126. response = self.process_exception_by_middleware(e,request)

_get_response中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py”   124. response = wrapd_callback(request,* callback_args,** callback_kwargs)

文件“ /Users/IS/Desktop/Project/website/app/views.py”在寄存器中   37. form.save()

保存文件“ /Users/IS/Desktop/Project/website/app/form.py”   42. profile.save()

保存文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py”   718. force_update = force_update,update_fields = update_fields)

save_base中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py”   748.更新= self._save_table(原始,cls,force_insert,force_update,使用,update_fields)

_save_table中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py”   831. result = self._do_insert(cls._base_manager,using,fields,update_pk,raw)

_do_insert中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py”   869. using = using,raw = raw)

manager_method中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/manager.py”   82. return getattr(self.get_queryset(),name)(* args,** kwargs)

_insert中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/query.py”   1136. return query.get_compiler(using = using).execute_sql(return_id)

execute_sql中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py”   1289. cursor.execute(sql,params)

在执行文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   100. return super()。execute(sql,params)

在执行文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   68. return self._execute_with_wrappers(sql,params,many = False,executor = self._execute)

_execute_with_wrappers中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   77. return executor(sql,params,many,context)

_execute中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   85. return self.cursor.execute(sql,params)

退出中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/utils.py”   89.从exc_value提高dj_exc_value.with_traceback(traceback)

_execute中的文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/backends/utils.py”   85. return 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)

异常类型:/ app / register /中的IntegrityError 异常值:NOT NULL约束失败:app_userprofile.user_id

0 个答案:

没有答案