【问题标题】:Getting TypeError: __init__() missing 1 required positional a rgument: 'on_delete'获取 TypeError:__init__() 缺少 1 个必需的位置参数:'on_delete'
【发布时间】:2020-10-03 08:55:30
【问题描述】:

'如何解决这个错误,我使用的是 Django 3.0'

from django.db import models
# Create your models here.
class Topic(models.Model):
    top_name=models.CharField(max_length=264,unique=True)
    def __str__(self):
        return self.top_name
class Webpage(models.Model):
    topic= models.ForeignKey(Topic)
    name = models.CharField(max_length=264,unique=True)
    url = models.URLField(unique= True)

    def __str__(self):
        return self.name
class AccessRecord(models.Model):
        name = models.ForeignKey(Webpage)
        date = models.DateField()

        def __str__(self):
            return str(self.date)

我复制了 Django 1 版本的代码,我使用的是 Django 3.0 版本。

文件“C:\Users\himan5hu\Documents\HTML\My_Django\first_project\first_app\models.py”,第 7 行,在 类网页(models.Model):

文件“C:\Users\himan5hu\Documents\HTML\My_Django\first_project\first_app\models.py”,第 8 行,网页 topic=models.ForeignKey(Topic)

topic= models.ForeignKey(Topic)

【问题讨论】:

    标签: python-3.x model-view-controller django-models atom-editor django-3.0


    【解决方案1】:

    由于,必须为ForeignKey 指定on_delete=… parameter [Django-doc]。在 之前,默认为CASCADE

    on_delete=… 是一个参数,它指定在目标对象被删除的情况下要做什么。在CASCADE 的情况下,如果Webpage 指向被删除的Topic,则将被删除。

    因此,您可以使用以下方法解决此问题:

    from django.db import models
    
    class Topic(models.Model):
        top_name=models.CharField(max_length=264,unique=True)
        def __str__(self):
            return self.top_name
    
    
    class Webpage(models.Model):
        topic= models.ForeignKey(Topic, on_delete=models.CASCADE)
        name = models.CharField(max_length=264, unique=True)
        url = models.URLField(unique=True)
    
        def __str__(self):
            return self.name
    
    
    class AccessRecord(models.Model):
            name = models.ForeignKey(Webpage, on_delete=models.CASCADE)
            date = models.DateField()
    
            def __str__(self):
                return str(self.date)

    您还需要在现有的迁移文件中对此进行更改。

    但是,检查文档可能会很有用,并查看其他选项是否更合适。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2019-06-25
      • 2019-02-07
      • 2023-03-19
      • 2021-06-05
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多