我收到此错误:
user = models.OneToOneField(User) TypeError: init ()缺少1个必需的位置参数:'on_delete'
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class UserProfileInfo(models.Model):
# creating relationship
user = models.OneToOneField(User)
# additional attributes
portfolio = models.URLField(blank=True)
picture = models.ImageField(upload_to='profile_pics', blank=True)
def __str__(self):
return self.user.username
答案 0 :(得分:1)
如错误所示,如果您引用的对象已被on_delete=
parameter [Django-doc]删除,则需要指定应该发生的情况。例如:
class UserProfileInfo(models.Model):
# creating relationship
user = models.OneToOneField(User, on_delete=models.CASCADE)
# additional attributes
portfolio = models.URLField(blank=True)
picture = models.ImageField(upload_to='profile_pics', blank=True)
def __str__(self):
return self.user.username
这里的选项是:
CASCADE
级联删除。 Django模拟SQL约束的行为
相关模型未调用ON DELETE CASCADE
,并删除包含ForeignKey
。
Model.delete()
,但pre_delete
和post_delete
信号发送给所有已删除的对象。
PROTECT
通过引发
ProtectedError
来防止引用对象的删除,django.db.IntegrityError
的子类。
SET_NULL
设置
ForeignKey
为null;仅当null
为True
时才有可能。
SET_DEFAULT
将
ForeignKey
设置为其default
的值;默认的 必须设置ForeignKey
。
SET()
将
ForeignKey
设置为传递给SET()
的值,或者将其设置为 被传入,调用它的结果。在大多数情况下,通过 为了避免在您执行查询时执行查询,必须调用callablemodels.py
已导入(...)
DO_NOTHING
不采取任何措施。如果您的数据库后端强制引用 完整性,除非您手动添加,否则将导致
IntegrityError
对数据库字段的SQL ON DELETE
约束。
答案 1 :(得分:1)
基本上遵循以下步骤可以解决网址问题
从Django 2.0开始,需要on_delete:
user = models.OneToOneField(User, on_delete=models.CASCADE)
答案 2 :(得分:1)
在构造函数中输入“ on_delete = models.CASCADE”
它的作用:何时删除您在模型的用户字段中引用的用户对象。还将删除特定用户的UserProfileInfo模型对象。