【问题标题】:TypeError: __init__() got an unexpected keyword argument 'on_delete'TypeError: __init__() 得到了一个意外的关键字参数“on_delete”
【发布时间】:2018-11-04 14:05:30
【问题描述】:

我建立了一个模型:

class Channel(models.Model):
    title = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True)
    description = models.TextField(blank=True, default='')
    description_html = models.TextField(editable=False, default='', 
blank=True)
    subscribers = models.ManyToManyField(User, 
through="ChannelMembers", on_delete=models.CASCADE,)

当我做 makemigration 它说:​​

TypeError: __init__() got an unexpected keyword argument 'on_delete'

当删除 on_delete 时,它会说:

TypeError: __init__() missing 1 required positional argument: 'on_delete'

穿什么?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    on_delete 不是ManyToManyField 的有效参数。您需要在 through 模型中的每个 ForeignKey 字段中为 ChannelMembers 使用 on_delete 参数。

    您可以看到以下示例如何在 Django Docs website 上实现这一目标

    在你的情况下,它看起来像这样:

    class Channel(models.Model):
        ...
        # Don't have the on_delete parameter on this field
        subscribers = models.ManyToManyField(User, through="ChannelMembers")
    
    # Add on_delete to both the fields in this class instead
    class ChannelMembers(models.Model):
        channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
        subscriber = models.ForeignKey(User, on_delete=models.CASCADE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 2017-10-16
      • 2020-10-22
      • 2021-11-17
      • 2016-11-01
      • 2021-10-21
      • 2021-10-15
      相关资源
      最近更新 更多