Django 错误:save() 得到了一个意外的关键字参数“force_insert”

Posted

技术标签:

【中文标题】Django 错误:save() 得到了一个意外的关键字参数“force_insert”【英文标题】:Django error: save() got an unexpected keyword argument 'force_insert' 【发布时间】:2011-11-14 16:37:32 【问题描述】:

我一直在关注 Practical Django Projects 这本书。很不错的书,不过好像bug很多。幸运的是,这个网站有一些修复:https://bitbucket.org/philgyford/practical-django-projects/src。我最新的错误是:save() got an unexpected keyword argument 'force_insert'

原来的代码是:

class Snippet(models.Model):
    title = models.CharField(max_length=255)
    language = models.ForeignKey(Language)
    author = models.ForeignKey(User)
    description = models.TextField()
    description_html = models.TextField(editable=False)
    code = models.TextField()
    highlighted_code = models.TextField(editable=False)
    pub_date = models.DateTimeField(editable=False)
    updated_date = models.DateTimeField(editable=False)
    objects = managers.SnippetManager()
    tags = TagField()

    class Meta:
        ordering = ['-pub_date']

    def __unicode__(self):
        return self.title

    def save(self, force_insert=False, force_update=False):
        if not self.id:
            self.pub_date = datetime.datetime.now()
        self.updated_date = datetime.datetime.now()
        self.description_html = markdown(self.description)
        self.highlighted_code = self.highlight()
        super(Snippet, self).save(force_insert, force_update)

    @models.permalink
    def get_absolute_url(self):
        return ('cab_snippet_detail', (),  'object_id': self.id )

    def highlight(self):
        return highlight(self.code,
                         self.language.get_lexer(),
                         formatters.HtmlFormatter(linenos=True))

# See http://blog.sveri.de/index.php?/categories/2-Django
tagging.register(Snippet, tag_descriptor_attr='etags')

我将保存方法(试图摆脱错误)更改为:

   def save(self, *args, **kwargs):
      if not 'force_insert' in kwargs:
         kwargs['force_insert'] = False
      if not 'force_update' in kwargs:
         kwargs['force_update'] = False
      # del kwargs['force_insert']
      if not self.id:
         self.pub_date = datetime.datetime.now()
      self.updated_date = datetime.datetime.now()
      self.description_html = markdown(self.description)
      self.highlighted_code = self.highlight()
      super(Snippet, self).save(*args, **kwargs)

我什至尝试取消注释 # del 位,这也无济于事。我正在使用 Django 1.3.1。任何想法为什么我会收到此错误?

【问题讨论】:

【参考方案1】:

你的保存覆盖的第二个版本应该没问题,虽然我会去掉两个 if 语句和 del 行。

如果仍然无法正常工作,请确保您的开发服务器实际上正在重新加载 models.py 文件。最快的方法是 CTRL+C 正在运行的那个,然后再次调用python manage.py runserver。虽然这无关紧要,但您可能还想删除 models.pyc(models.py 的编译版本),只是为了更加确定新代码正在运行。

虽然《实用 Django 项目》总体上是一本优秀的书,但在这一点上它非常已经过时了。您可能想寻找更新的资源来学习。

【讨论】:

我自己修好了,结果我也需要在书签模型上做,因为它使用了 sn-p 模型。

以上是关于Django 错误:save() 得到了一个意外的关键字参数“force_insert”的主要内容,如果未能解决你的问题,请参考以下文章

/reg/ save() 处的 TypeError 有一个意外的关键字参数“force_insert”

Django __init__() 得到了一个意外的关键字参数“用户”

Django - serve() 得到了一个意外的关键字参数“documuent_root”

__init__() 在 python/django 中得到了一个意外的关键字参数“mime”

如何在 django 中获取 .save() 的查询?

Django - error_403() 得到了一个意外的关键字参数“异常”