类型错误:“作者”是此函数的无效键参数

Posted

技术标签:

【中文标题】类型错误:“作者”是此函数的无效键参数【英文标题】:Type Error : 'authors' is an invalid key argument for this function 【发布时间】:2015-07-04 11:26:10 【问题描述】:

我真的不知道为什么我在这个 django 应用程序中遇到类型错误。下面是我的models.py代码:

from django.db import models

# Create your models here.
class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=30)
    website = models.URLField()

    def __str__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(verbose_name=' Your E-mail')

    def __str__(self):
        return "%s %s" %(self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField(blank=True, null=True)

    def __str__(self):
        return self.title

我已经分别从名为 (mak & mas) 的 shell 创建了作者对象和发布者对象。

>>> from books.models import Publisher, Author, Book
>>> mak = Author.objects.create(first_name = "Kennedy")
>>> mas = Publisher.objects.create(name = "Dreem Inc")

但是当我尝试填充 Book 数据库表时,我得到一个类型错误:

>>> mybook = Book(title="The Prince", authors=mak, publisher=mas, publication_date = date(1989, 6, 30))

>>> Type Error : 'authors' is an invalid key argument for this function

我可以轻松地填充“发布者”和“作者”表。

请帮帮忙?

【问题讨论】:

看看这个话题:***.com/questions/6996176/… 【参考方案1】:

您不能在模型的构造函数中分配 ManyToMany 字段。此外,您不能将 M2M 字段设置为未保存的实例。所以你必须先保存实例,然后分配 M2M 字段:

mybook = Author.objects.create(title="The Prince", publisher=mas,
                               publication_date=date(1989, 6, 30))
mybook.authors.add(mak) # or mybook.authors = [mak]

【讨论】:

对不起@catavaran,我之前犯了一个错误。我通过这样做更正了它:>>> mybook = Book(title="The Prince", authors=mak, publisher=mas, publication_date = date(1989, 6, 30)) >>> 类型错误:'authors' 是此函数的键参数无效

以上是关于类型错误:“作者”是此函数的无效键参数的主要内容,如果未能解决你的问题,请参考以下文章

opencv TypeError:“插值”是此函数的无效关键字参数

Firebase firestore 云函数显示错误:无效使用类型“未定义”作为 Firestore 参数

错误:一元“*”的类型参数无效(有“int”)

Snowflake SQL 错误 - 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))

获取“first_name”的Django是此函数的无效关键字参数“创建模型类实例时的TypeError”

返回列表的总和:错误:参数的“类型”(列表)无效