Ошибка Django: save () получил неожиданный аргумент ключевого слова 'force_insert' - PullRequest
1 голос
/ 14 ноября 2011

Я следую вместе с книгой «Практические проекты Джанго».Очень хорошая книга, но, похоже, в ней много ошибок.К счастью, на этом сайте есть некоторые исправления: 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 Ответ

1 голос
/ 14 ноября 2011

Вторая версия вашего переопределения сохранения должна быть в порядке, хотя я бы избавился от двух операторов if и строки del.

Если это все еще не работает, убедитесь,сервер разработки фактически перезагружает файл models.py.Самый быстрый способ - нажать CTRL + C на работающую, а затем снова вызвать python manage.py runserver.Хотя это не должно иметь значения, вы также можете избавиться от models.pyc (скомпилированная версия models.py), просто чтобы быть уверенным в том, что новый код работает.Проекты - отличная книга в целом, на данный момент она очень устарела.Возможно, вы захотите поискать новые ресурсы для изучения.

...