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 获取TypeError:uuu init_uuuu()缺少1个必需的位置参数:';删除';尝试在包含条目的子表之后添加父表时_Python_Django_Django Models_Django 2.0 - Fatal编程技术网

Python 获取TypeError:uuu init_uuuu()缺少1个必需的位置参数:';删除';尝试在包含条目的子表之后添加父表时

Python 获取TypeError:uuu init_uuuu()缺少1个必需的位置参数:';删除';尝试在包含条目的子表之后添加父表时,python,django,django-models,django-2.0,Python,Django,Django Models,Django 2.0,我的sqlite数据库中有两个类,一个名为Categorie的父表和一个名为Article的子表。我首先创建了子表类并添加了条目。所以首先我有这个: class Article(models.Model): titre=models.CharField(max_length=100) auteur=models.CharField(max_length=42) contenu=models.TextField(null=True) date=models.Date

我的sqlite数据库中有两个类,一个名为
Categorie
的父表和一个名为
Article
的子表。我首先创建了子表类并添加了条目。所以首先我有这个:

class Article(models.Model):
    titre=models.CharField(max_length=100)
    auteur=models.CharField(max_length=42)
    contenu=models.TextField(null=True)
    date=models.DateTimeField(
        auto_now_add=True,
        auto_now=False,
        verbose_name="Date de parution"
    )

    def __str__(self):
        return self.titre
在我添加了父表之后,现在我的
models.py
如下所示:

from django.db import models

# Create your models here.
class Categorie(models.Model):
    nom = models.CharField(max_length=30)

    def __str__(self):
        return self.nom


class Article(models.Model):
    titre=models.CharField(max_length=100)
    auteur=models.CharField(max_length=42)
    contenu=models.TextField(null=True)
    date=models.DateTimeField(
        auto_now_add=True,
        auto_now=False,
        verbose_name="Date de parution"
    )
    categorie = models.ForeignKey('Categorie')

    def __str__(self):
        return self.titre
categorie = models.ForeignKey(
    'Categorie',
    on_delete=models.CASCADE,
)
因此,当我运行
python manage.py makemigrations
时,会出现以下错误:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\core\management\__init__.py", line 330, in execute
    django.setup()
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\registry.py", line 112, in populate
    app_config.import_models()
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django-2.0-py3.5.egg\django\apps\config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 665, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "C:\Users\lislis\Django\mon_site\blog\models.py", line 6, in <module>
    class Article(models.Model):
  File "C:\Users\lislis\Django\mon_site\blog\models.py", line 16, in Article
    categorie = models.ForeignKey('Categorie')
TypeError: __init__() missing 1 required positional argument: 'on_delete'
回溯(最近一次呼叫最后一次):
文件“manage.py”,第15行,在
从命令行(sys.argv)执行命令
文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-2.0-py3.5.egg\django\core\management\\ uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
utility.execute()
文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-2.0-py3.5.egg\django\core\management\\ uuuuu init\uuuuuu.py”,第330行,执行
django.setup()
文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-2.0-py3.5.egg\django\\ uuuuuuu init\ uuuuuuuu.py”,第24行,在安装程序中
应用程序。填充(设置。已安装的应用程序)
文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-2.0-py3.5.egg\django\apps\registry.py”,第112行,在填充中
app_config.import_models()
导入模型中的文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\site packages\django-2.0-py3.5.egg\django\apps\config.py”第198行
self.models\u module=导入模块(models\u module\u name)
文件“C:\Users\lislis\AppData\Local\Programs\Python\Python35-32\lib\importlib\ \uuuuuu init\uuuuuu.py”,第126行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第986行,在_gcd_import中
文件“”,第969行,在“查找”和“加载”中
文件“”,第958行,在“查找”和“加载”中解锁
文件“”,第673行,在“加载”中
exec_模块中第665行的文件“”
文件“”,第222行,在已删除帧的调用中
文件“C:\Users\lislis\Django\mon\u site\blog\models.py”,第6行,在
类文章(models.Model):
文件“C:\Users\lislis\Django\mon\u site\blog\models.py”,第16行,在文章中
categorie=models.ForeignKey('categorie')
TypeError:\uuuu init\uuuu()缺少1个必需的位置参数:“on\u delete”

我在stackoverflow中看到了一些类似的问题,但似乎不是同一个问题:

您可以像这样更改类
文章的属性
category

from django.db import models

# Create your models here.
class Categorie(models.Model):
    nom = models.CharField(max_length=30)

    def __str__(self):
        return self.nom


class Article(models.Model):
    titre=models.CharField(max_length=100)
    auteur=models.CharField(max_length=42)
    contenu=models.TextField(null=True)
    date=models.DateTimeField(
        auto_now_add=True,
        auto_now=False,
        verbose_name="Date de parution"
    )
    categorie = models.ForeignKey('Categorie')

    def __str__(self):
        return self.titre
categorie = models.ForeignKey(
    'Categorie',
    on_delete=models.CASCADE,
)
错误应该消失

最后,您可能需要在_delete
上为
添加另一个选项,有关详细信息,请查看文档:

编辑:

正如您在评论中所述,您对删除上的
没有任何特殊要求,您可以使用选项
不做任何事

# ...
on_delete=models.DO_NOTHING,
# ...

由于Django 2.x,因此需要删除上的

自1.9版以来已弃用:on_delete将成为必填项 Django 2.0中的参数。在旧版本中,它默认为级联


从Django 2.0的
中删除
是必需的:

user=models.OneToOneField(用户,on_delete=models.CASCADE)


如果用户被删除,它将删除子表数据。有关更多详细信息,请查看Django文档。

如果使用foreignkey,则必须使用“on_delete=models.CASCADE”,因为它将消除从父表中删除原始元素后产生的复杂性。就这么简单

categorie = models.ForeignKey('Categorie', on_delete=models.CASCADE)

这里有一些可用的选项,如果它有助于任何人进行on_delete

级联、不执行任何操作、保护、设置、设置默认值、设置空值


由于Django 2.0,ForeignKey字段需要两个位置参数:

  • 要映射到的模型
  • on_delete参数
  • categorie=models.ForeignKey('categorie',on_delete=models.PROTECT)
    
    这里有一些方法可以用于on_delete

  • 级联
  • 级联删除。Django在DELETE CASCADE上模拟SQL约束的行为,并删除包含ForeignKey的对象

  • 保护
  • 通过引发ProtectedError(django.db.IntegrityError的子类)防止删除引用的对象

  • 什么也不做
  • 不要采取行动。如果数据库后端强制引用完整性,这将导致IntegrityError,除非手动向数据库字段添加SQL ON DELETE约束

    您可以通过阅读有关删除的详细信息。

    这对我很有用
    pip安装django csvimport——如果您不知道输入参数的选项,请升级。
    只需在迁移之前保留默认值,如_delete=None上的

    on_delete=models.CASCADE

    这是旧版本中的代码段:

    if on_delete is None:
        warnings.warn(
            "on_delete will be a required arg for %s in Django 2.0. Set "
            "it to models.CASCADE on models and in existing migrations "
            "if you want to maintain the current default behavior. "
            "See https://docs.djangoproject.com/en/%s/ref/models/fields/"
            "#django.db.models.ForeignKey.on_delete" % (
                self.__class__.__name__,
                get_docs_version(),
            ),
            RemovedInDjango20Warning, 2)
        on_delete = CASCADE
    

    通过将这两个参数添加到ForeignKey,解决了类似的问题: null=True,on_delete=models.SET_null

    在Django版本1.9之后,删除时的
    成为必需参数,即来自Django 2.0

    在旧版本中,它默认为级联

    因此,如果您想复制在早期版本中使用的功能。使用以下参数

    categorie = models.ForeignKey('Categorie', on_delete = models.CASCADE)
    
    这将产生与早期版本相同的效果,而无需明确指定


    您使用的是哪种版本的django?那么您在这里对什么感到困惑呢?正如错误明确指出的,ForeignKey有一个必需的参数,
    on\u delete
    。请参阅。我不需要关于_delete的
    参数,它是强制性的吗?@jochri3是的,必需的位置参数表示它是强制性的。查看文档,找出哪个选项最适合您的需要。为什么回答这个问题,而Andrey在前面用这些信息回答?这是如何回答问题的?嗨,Mayank。您可能做了其他事情来修复该错误,或者您正在使用django的早期版本。这由supply解决