列 "project_id" 中的 /new_project 空值处的外键完整性错误违反了非空约束
Foreign Key IntegrityError at /new_project null value in column "project_id" violates not-null constraint
我知道这可能是重复的,但我已经尝试了所有解决这种性质的其他问题的方法,但我似乎无法解决这个问题,这是我的问题。
型号
class Project(models.Model):
project_name = models.CharField(max_length=50)
project_url = models.URLField()
last_update = models.DateField(default=timezone.now)
def __str__(self):
return self.project_name
class Commit(models.Model):
project = models.ForeignKey(Project, on_delete = models.CASCADE, verbose_name="project")
commit_id = models.CharField(max_length=40)
author = models.CharField(max_length=200)
date = models.DateTimeField(default=timezone.now)
commit_msg = models.TextField()
commit_info = models.TextField()
regex_tags = models.TextField(null=True)
def __str__(self):
return self.commit_id + " - " + self.author + " - "
我有这些模型,我需要每个提交都与它们来自的项目相关联。在我看来,我这样做:
class new_project_view(View):
def get(self, request):
return render(request, 'new_project.html')
def post(self,request):
if 'create_project' in request.POST:
project_name = request.POST['projectname']
project_url = request.POST['projecturl']
print("project url ", project_url)
print("project name", project_name)
generate_log_file(project_url)
logfile = open("logfile.txt", "r")
if not logfile.readlines() :
print("Estou vazio")
logfile.close()
return render(request, 'new_project.html')
else:
print("Add log to DB")
logfile.close()
#Here I create the project model and send it to a function
#that adds to the commits.
project = Project.objects.create()
project.project_name = project_name
project.project_url = project_url
project.save()
add_log_to_db(project)
print("Added")
return render(request, 'new_project.html')
add_log_to_db 函数做了很多,但它按预期工作,因为在我想要一个与之关联的项目之前,我能够创建提交并填充数据库。因此,我将分享我尝试将项目添加到 Commit 模型的片段。
elif check_flag==1:
if lines== '\n':
regex_str = ''
print("---")
print(project.project_name)
print(project.project_url)
print(project.last_update)
print(project.pk)
print("---")
commit_details = Commit.objects.create()
commit_details.project = project
commit_details.commit_id = commit_id
commit_details.author = author
commit_details.commit_msg = str_commit
commit_details.commit_info = str_mod
commit_details.date = date_obj
for i in range(len(regex_list)):
if(i != len(regex_list)):
regex_str+= regex_list[i]+","
else:
regex_str+=regex_list[i]
commit_details.regex_tags = regex_str
commit_details.save()
项目打印正常所以我不知道为什么会出现这个错误。我放弃了所有东西并多次创建了一个新数据库。有人对此有任何想法吗?
提前谢谢你。
如果它有用,我也会留下回溯,谢谢!
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/new_project
Django Version: 3.2.4
Python Version: 3.8.6
Installed Applications:
['app',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
The above exception (null value in column "project_id" violates not-null constraint
DETAIL: Failing row contains (1, , , 2021-06-17 15:50:09.841386+00, , , null, null).
) was the direct cause of the following exception:
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/Project-Scanner/ProjectScanner/app/views.py", line 48, in post
add_log_to_db(project)
File "/home/dingo/Desktop/Project Scanner/Project-Scanner/ProjectScanner/app/aux.py", line 40, in add_log_to_db
commit_details = Commit.objects.create()
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/query.py", line 453, in create
obj.save(force_insert=True, using=self.db)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 763, in save_base
updated = self._save_table(
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 868, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 906, in _do_insert
return manager._insert(
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
cursor.execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
return super().execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
Exception Type: IntegrityError at /new_project
Exception Value: null value in column "project_id" violates not-null constraint
DETAIL: Failing row contains (1, , , 2021-06-17 15:50:09.841386+00, , , null, null).
commit_details = Commit()
你的构造是错误的,create()保存到数据库
我知道这可能是重复的,但我已经尝试了所有解决这种性质的其他问题的方法,但我似乎无法解决这个问题,这是我的问题。
型号
class Project(models.Model):
project_name = models.CharField(max_length=50)
project_url = models.URLField()
last_update = models.DateField(default=timezone.now)
def __str__(self):
return self.project_name
class Commit(models.Model):
project = models.ForeignKey(Project, on_delete = models.CASCADE, verbose_name="project")
commit_id = models.CharField(max_length=40)
author = models.CharField(max_length=200)
date = models.DateTimeField(default=timezone.now)
commit_msg = models.TextField()
commit_info = models.TextField()
regex_tags = models.TextField(null=True)
def __str__(self):
return self.commit_id + " - " + self.author + " - "
我有这些模型,我需要每个提交都与它们来自的项目相关联。在我看来,我这样做:
class new_project_view(View):
def get(self, request):
return render(request, 'new_project.html')
def post(self,request):
if 'create_project' in request.POST:
project_name = request.POST['projectname']
project_url = request.POST['projecturl']
print("project url ", project_url)
print("project name", project_name)
generate_log_file(project_url)
logfile = open("logfile.txt", "r")
if not logfile.readlines() :
print("Estou vazio")
logfile.close()
return render(request, 'new_project.html')
else:
print("Add log to DB")
logfile.close()
#Here I create the project model and send it to a function
#that adds to the commits.
project = Project.objects.create()
project.project_name = project_name
project.project_url = project_url
project.save()
add_log_to_db(project)
print("Added")
return render(request, 'new_project.html')
add_log_to_db 函数做了很多,但它按预期工作,因为在我想要一个与之关联的项目之前,我能够创建提交并填充数据库。因此,我将分享我尝试将项目添加到 Commit 模型的片段。
elif check_flag==1:
if lines== '\n':
regex_str = ''
print("---")
print(project.project_name)
print(project.project_url)
print(project.last_update)
print(project.pk)
print("---")
commit_details = Commit.objects.create()
commit_details.project = project
commit_details.commit_id = commit_id
commit_details.author = author
commit_details.commit_msg = str_commit
commit_details.commit_info = str_mod
commit_details.date = date_obj
for i in range(len(regex_list)):
if(i != len(regex_list)):
regex_str+= regex_list[i]+","
else:
regex_str+=regex_list[i]
commit_details.regex_tags = regex_str
commit_details.save()
项目打印正常所以我不知道为什么会出现这个错误。我放弃了所有东西并多次创建了一个新数据库。有人对此有任何想法吗? 提前谢谢你。
如果它有用,我也会留下回溯,谢谢!
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/new_project
Django Version: 3.2.4
Python Version: 3.8.6
Installed Applications:
['app',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
The above exception (null value in column "project_id" violates not-null constraint
DETAIL: Failing row contains (1, , , 2021-06-17 15:50:09.841386+00, , , null, null).
) was the direct cause of the following exception:
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/Project-Scanner/ProjectScanner/app/views.py", line 48, in post
add_log_to_db(project)
File "/home/dingo/Desktop/Project Scanner/Project-Scanner/ProjectScanner/app/aux.py", line 40, in add_log_to_db
commit_details = Commit.objects.create()
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/query.py", line 453, in create
obj.save(force_insert=True, using=self.db)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 726, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 763, in save_base
updated = self._save_table(
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 868, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/base.py", line 906, in _do_insert
return manager._insert(
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
cursor.execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 98, in execute
return super().execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/dingo/Desktop/Project Scanner/env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
Exception Type: IntegrityError at /new_project
Exception Value: null value in column "project_id" violates not-null constraint
DETAIL: Failing row contains (1, , , 2021-06-17 15:50:09.841386+00, , , null, null).
commit_details = Commit()
你的构造是错误的,create()保存到数据库