Django save () ошибка - PullRequest
       8

Django save () ошибка

1 голос
/ 28 февраля 2012

Я пытаюсь сохранить отношение m2m модели. Это заканчивается в модели, которую вы видите ниже. Я получаю ошибку:

save() got multiple values for keyword argument 'force_insert'

Так что мне кажется, что force_insert передается как в args, так и в kwargs. Однако при проверке значений с помощью pdb я получаю следующее: args = () и kwargs = {'force_insert': True, 'using': 'default'}. Так что force_insert отсутствует в аргументах. Любые идеи, почему это идет не так?

class TaggedItem(GenericTaggedItemBase, TaggedItemBase):
    """
    Also caches team info when available.
    """
    team = models.ForeignKey(Team, null=True)

    def save(self, *args, **kwargs):
        if hasattr(self.content_object, 'team'):
            self.team = self.content_object.team

        import pdb; pdb.set_trace()

        super(TaggedItem, self).save(self, *args, **kwargs)

    class Meta:
        verbose_name = _("Tagged Item")
        verbose_name_plural = _("Tagged Items")

РЕДАКТИРОВАТЬ: Как и ожидалось, если я удаляю 'force_insert' из kwargs, сохранение работает.

StackTrace:

D:\Stamkracht\v3\v3_env\lib\site-packages\django\core\handlers\base.py in get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...

D:\Stamkracht\v3\backbone\utils.py in _decorated
        return view_func(request, *args, **kwargs) ...

D:\Stamkracht\v3\v3_env\lib\site-packages\annoying\decorators.py in wrapper
            output = function(request, *args, **kwargs) ...

D:\Stamkracht\v3\apps\blog\views.py in create
    return _handle_blog_form(request, blog) ...

D:\Stamkracht\v3\apps\blog\views.py in _handle_blog_form
            form.save_m2m() # Needed for tags! ...

D:\Stamkracht\v3\v3_env\lib\site-packages\django\forms\models.py in save_m2m
                f.save_form_data(instance, cleaned_data[f.name]) ...

D:\Stamkracht\v3\apps\taggit\managers.py in save_form_data
        getattr(instance, self.name).set(*value) ...

D:\Stamkracht\v3\apps\taggit\utils.py in inner
        return func(self, *args, **kwargs) ...

D:\Stamkracht\v3\apps\taggit\managers.py in set
        self.add(*tags) ...

D:\Stamkracht\v3\apps\taggit\utils.py in inner
        return func(self, *args, **kwargs) ...

D:\Stamkracht\v3\apps\taggit\managers.py in add
            self.through.objects.get_or_create(tag=tag, **self._lookup_kwargs()) ...

D:\Stamkracht\v3\v3_env\lib\site-packages\django\db\models\manager.py in get_or_create
        return self.get_query_set().get_or_create(**kwargs) ...

D:\Stamkracht\v3\v3_env\lib\site-packages\django\db\models\query.py in get_or_create
                obj.save(force_insert=True, using=self.db) ...

D:\Stamkracht\v3\apps\taggit\models.py in save
        super(TaggedItem, self).save(self, *args, **kwargs) ...

1 Ответ

1 голос
/ 28 февраля 2012

Вы звоните на super выключен. Вы не должны передавать self в метод. Это уже покрыто super. Используйте это вместо:

super(TaggedItem, self).save(*args, **kwargs)
...