Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django.db.utils.IntegrityError:唯一约束失败:core\u profile.user\u id_Python_Django_Django Models - Fatal编程技术网

Python django.db.utils.IntegrityError:唯一约束失败:core\u profile.user\u id

Python django.db.utils.IntegrityError:唯一约束失败:core\u profile.user\u id,python,django,django-models,Python,Django,Django Models,我要和django一起开始我的第一个网络项目 -我已经创建了一个应用程序“核心”来处理注册和登录 -在注册期间,我希望用户提交一些附加信息 创建用户配置文件的步骤 -我用OneToOne关系扩展了Django的默认用户模型 我尝试上载文件时遇到此错误 回溯: File "C:\Python36\lib\site-packages\django\db\backends\utils.py" in execute 65. return self.cursor.exe

我要和django一起开始我的第一个网络项目

-我已经创建了一个应用程序“核心”来处理注册和登录

-在注册期间,我希望用户提交一些附加信息 创建用户配置文件的步骤

-我用
OneToOne
关系扩展了Django的默认用户模型

我尝试上载文件时遇到此错误

回溯:

File "C:\Python36\lib\site-packages\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Python36\lib\site-packages\django\db\backends\sqlite3\base.py" in 
execute
328.         return Database.Cursor.execute(self, query, params)

The above exception (UNIQUE constraint failed: core_profile.user_id) was the 
direct cause of the following exception:

File "C:\Python36\lib\site-packages\django\core\handlers\exception.py" in 
inner
  41.             response = get_response(request)

File "C:\Python36\lib\site-packages\django\core\handlers\base.py" in 
_get_response
  187.                 response = self.process_exception_by_middleware(e, 
request)

File "C:\Python36\lib\site-packages\django\core\handlers\base.py" in 
_get_response
  185.                 response = wrapped_callback(request, *callback_args, 
**callback_kwargs)

File "C:\djangoprojects\mysite\mysite\core\views.py" in upload_files
  92.                 document.save()

File "C:\Python36\lib\site-packages\django\db\models\base.py" in save
  806.                        force_update=force_update, 
update_fields=update_fields)

File "C:\Python36\lib\site-packages\django\db\models\base.py" in save_base
  836.             updated = self._save_table(raw, cls, force_insert, 
force_update, using, update_fields)

File "C:\Python36\lib\site-packages\django\db\models\base.py" in _save_table
  922.             result = self._do_insert(cls._base_manager, using, 
fields, update_pk, raw)

File "C:\Python36\lib\site-packages\django\db\models\base.py" in _do_insert
  961.                                using=using, raw=raw)

File "C:\Python36\lib\site-packages\django\db\models\manager.py" in 
manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, 
**kwargs)

File "C:\Python36\lib\site-packages\django\db\models\query.py" in _insert
  1060.         return 
query.get_compiler(using=using).execute_sql(return_id)

File "C:\Python36\lib\site-packages\django\db\models\sql\compiler.py" in 
execute_sql
  1099.                 cursor.execute(sql, params)

File "C:\Python36\lib\site-packages\django\db\backends\utils.py" in execute
  80.             return super(CursorDebugWrapper, self).execute(sql, 
params)

File "C:\Python36\lib\site-packages\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Python36\lib\site-packages\django\db\utils.py" in __exit__
  94.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

File "C:\Python36\lib\site-packages\django\utils\six.py" in reraise
  685.             raise value.with_traceback(tb)

File "C:\Python36\lib\site-packages\django\db\backends\utils.py" in execute
  65.                 return self.cursor.execute(sql, params)

File "C:\Python36\lib\site-packages\django\db\backends\sqlite3\base.py" in 
execute
  328.         return Database.Cursor.execute(self, query, params)

Exception Type: IntegrityError at /core/upload_files/
Exception Value: UNIQUE constraint failed: core_profile.user_id
我的一些代码:

型号:

class Profile(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE)
  birth_date = models.DateField(null=True, blank=True)
  birth_place = models.CharField(max_length=80, verbose_name= ("Lieu de 
  Naissance"))
  email_confirmed = models.BooleanField(default=False)
  adress = models.CharField(max_length=80, verbose_name=("Adresse"))
  adress_complement = models.CharField(max_length=80, verbose_name=
  ("Complément d'Adresse"))
  city = models.CharField(max_length=80, verbose_name=("Ville"))
  zip_code = models.IntegerField(null=True, blank=True)
  drive_licence_num = models.CharField(max_length=80, verbose_name=("N° du 
  Permis de conduire"))
  social_secu_num = models.IntegerField(null=True, blank=True)
  phone_number = models.IntegerField(null=True, blank=True)
  profile_completed = models.BooleanField(default=False)
#DOCUMENTS TO UPLOAD
  id_card = models.FileField(('Carte Nationale d\'Identité'))
  drive_licence = models.FileField(('Permis de conduire'))
  police_record = models.FileField(('Casier judiciaire'))
  medical_visit = models.FileField(('Visite médicale'))
  rib = models.FileField(('Relevé d\'Identité Bancaire (RIB)'))
  uploaded_at = models.DateTimeField(auto_now_add=True)
  docs_are_checked = models.BooleanField(default=False)

  def __str__(self):
    return self.user.username

@receiver(post_save, sender=User)
 def update_user_profile(sender, instance, created, **kwargs):
  if created:
      Profile.objects.create(user=instance)
  instance.profile.save()
表格:

class SignUpForm(UserCreationForm):
  email = forms.EmailField(max_length=254, help_text='Required. Inform a 
                           valid email address.')
  class Meta:
    model = User
    fields = ('first_name', 'last_name', 'email', 'username', 'password1', 
              'password2',)

class ProfileForm(forms.ModelForm):
  class Meta:
    model = Profile
    fields = ('birth_date','birth_place', 'adress', 'adress_complement',
              'city', 'zip_code', 'drive_licence_num', 
              'social_secu_num','phone_number')

class DocumentForm(forms.ModelForm):
  id_card = forms.FileField(('Carte Nationale d\'Identité'),
    help_text='Required. Recto / Verso.')
  class Meta:
    model = Profile
    fields = ('id_card', 'drive_licence', 
              'police_record', 'medical_visit', 'rib',)
观点:

def complete_profile(request):   
if request.user.is_authenticated():
    if request.method == 'POST':
        form = ProfileForm(request.POST, instance=request.user.profile)
        if form.is_valid():
            profile = form.save(commit=False)
            profile.profile_completed = True
            profile.save()
            return redirect('upload_files')
    else:
        form = ProfileForm()
        return render(request, 'complete_profile.html', {'form': form})
else:
    return redirect('login')

def upload_files(request):
if request.user.is_authenticated():
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            document = form.save(commit=False)
            document.user = request.user
            document.save()
            return render(request, 'home.html')
    else:
        form = DocumentForm()
        return render(request, 'upload_files.html', {'form': form})
else:
    return render(request, 'login.html')

我不能确切地解释你为什么会出错。但是,由于您是在信号处理程序中创建概要文件,因此我认为您应该将实例传递给表单。这意味着您不再需要在
if form.is\u valid()
块中设置
document.user

if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES, instance=request.user.profile)
    if form.is_valid():
        document = form.save()
        return render(request, 'home.html')
else:
    form = DocumentForm(instance=request.user.profile)
请注意,建议在post请求成功后重定向用户,以防止重复提交

if form.is_valid():
    document = form.save()
    return redirect('/')

你做了
/manage.py makemigrations
/manage.py migrate
?@Hanseffranz是的,我做了,看起来你的接收者在创建用户时创建了一个配置文件,所以我希望你在
上传文件
视图中使用
文档表单(request.POST,request.FILES,instance=request.user.profile)
,这样,您就不需要
document.user=request.user
@Alasdair thanx bro,它可以工作于thanx以获得建议在将渲染更改为重定向后,im现在出现以下错误:“view mysite.core.views.upload\u文件没有返回HttpResponse对象。它没有返回任何结果。你能帮助解决这个问题吗?用
return redirect()
替换
return render()
不会导致这个错误。问题是当
request.method==“POST”
但是表单无效时,您没有返回响应。看起来您应该取消提示
返回render(请求'upload_files.html',{'form':form})
,这样它就不是
else
块的一部分。