Python Django 2.1.7,整数错误,外键约束失败
我对用户和帖子模型之间的ForeignKey关系有一个问题。或者,在为自定义用户模型创建ForeignKey时,会出现一个错误: 回溯:Python Django 2.1.7,整数错误,外键约束失败,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我对用户和帖子模型之间的ForeignKey关系有一个问题。或者,在为自定义用户模型创建ForeignKey时,会出现一个错误: 回溯: File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\backends\base\base.py" in _commit 239. return self.connection.commit() The above
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
The above exception (FOREIGN KEY constraint failed) was the direct cause of the following exception:
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\core\handlers\base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\contrib\admin\options.py" in wrapper
604. return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\utils\decorators.py" in _wrapped_view
142. response = view_func(request, *args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\contrib\admin\sites.py" in inner
223. return view(request, *args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\contrib\admin\options.py" in add_view
1637. return self.changeform_view(request, None, form_url, extra_context)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\utils\decorators.py" in _wrapper
45. return bound_method(*args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\utils\decorators.py" in _wrapped_view
142. response = view_func(request, *args, **kwargs)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\contrib\admin\options.py" in changeform_view
1525. return self._changeform_view(request, object_id, form_url, extra_context)
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\transaction.py" in __exit__
212. connection.commit()
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\backends\base\base.py" in commit
261. self._commit()
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\utils.py" in __exit__
89. raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\jack_\.virtualenvs\SNDProject-v81rGQ8f\lib\site-packages\django\db\backends\base\base.py" in _commit
239. return self.connection.commit()
Exception Type: IntegrityError at /admin/auth_pp/posts/add/
Exception Value: FOREIGN KEY constraint failed
错误页:
我为代码中可能存在的缺陷和语法错误提前道歉。提前谢谢你
编辑:
错误只发生在admin中,在shell中有效OneToOneField表示一个用户只有一个post,一个post只有一个用户 这将添加唯一约束。 您需要使用外键(是的,您没有使用它)
OneToOneField表示一个用户只有一个帖子,而一个帖子只有一个用户 这将添加唯一约束。 您需要使用外键(是的,您没有使用它)
请您提供错误,以及当前行为和预期的错误?您希望这样用户只能发表一篇文章还是多篇文章?正如Whodini所暗示的,您的
作者
字段是一个OnToneField
。这意味着它将有一个外键约束,确保用户和帖子之间最多只能有一对一的关系。我猜您已经创建了多个帖子,当您尝试添加此模型时,它失败了,因为您的default=1
将导致多个帖子与一个用户关联。我尝试更改default=None
,但结果保持不变。请提供错误,对于当前行为和预期行为?您希望这样做,以便用户只能拥有一篇帖子还是多篇帖子?正如Whodini所暗示的,您的作者
字段是一个ontonefield
。这意味着它将有一个外键约束,确保用户和帖子之间最多只能有一对一的关系。我猜您已经创建了多个帖子,当您尝试添加此模型时,它失败是因为您的default=1
将导致多个帖子与一个用户关联。我试图更改default=None
,但当我将OneToOneField
替换为ForeignKey
错误时,结果保持不变,无法避免指定ForeignKey构造函数的删除参数或看到错误文档中的示例即使我将OneToOneField
替换为ForeignKey
错误也无法避免为ForeignKey的构造函数指定delete参数或查看文档中的示例
#CustomUserModel
class Usr(AbstractBaseUser):
username = models.CharField(max_length=30, validators=[
RegexValidator(
regex=USERNAME_REGEX,
message='Username must be alphanumeric or numbers',
code='invalid_username'
)
], unique=True)
objects = UsrManager()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
def has_perm(self, perm, obj=None):
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
# Simplest possible answer: Yes, always
return True
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = []
#Model with ForeignKey
class Posts(models.Model):
title = models.CharField(max_length=50, unique=True)
text = models.CharField(max_length=300)
author = models.OneToOneField(get_user_model() ... default=1, swappable=True, related_query_name='post', db_constraint=True, related_name='posts', on_delete=models.CASCADE)
author = models.ForeignKey(...)