类型错误:__init__() 得到了一个意外的关键字参数“on_delete”

Maj*_*abi 6 django django-models

我建立了一个模型:

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,)
Run Code Online (Sandbox Code Playgroud)

当我做 makemigration 它说:

TypeError: __init__() got an unexpected keyword argument 'on_delete'
Run Code Online (Sandbox Code Playgroud)

当删除on_delete 时,它说:

TypeError: __init__() missing 1 required positional argument: 'on_delete'
Run Code Online (Sandbox Code Playgroud)

穿什么?

Joh*_*han 12

on_delete不是 a 上的有效参数ManyToManyField。您需要使用模型on_delete中每个ForeignKey字段中的参数throughChannelMembers代替。

您可以在Django Docs 网站上查看以下示例,了解如何实现这一点

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

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)
Run Code Online (Sandbox Code Playgroud)