Django Taggit - Ассоциации тегов не сохраняются из пользовательской формы администратора - PullRequest
4 голосов
/ 11 мая 2011

Схожу с ума здесь ... Из оболочки я могу сделать:

product.tags.add("a_new_tag")

Тег добавляется в БД, и связь тега с продуктом работает правильно. (то есть, когда я Product.objects.filter(tags__name__in=["a_new_tag"] выплевывает соответствующий продукт)

Что мне нужно сделать, так это добавить несколько тегов в админку при обработке формы.

Вот мой код формы (прочитайте комментарии в строках 4 и 5):

class ProductForm(ModelForm):
        def save(self, commit=True):
            product = super(ProductForm, self).save(commit=False)
            product.type="New Type to Confirm Info is being Saved Correctly" //this is saved to the product.
            product.tags.add('a_new_tag_1') //the tag is saved to the taggit db, but the association with the product isn't kept.
            product.save()
            self.save_m2m()
            return m

Вместо этого я попытался сохранить данные в классе администратора, но это тоже не сработало:

class ProductAdmin(admin.ModelAdmin):
    form = ProductForm
    def save_model(self, request, obj, form, change):
        obj.type="new_type" //this works 
        obj.tags.add("a_new_tag_2") //tag association not saved
        obj.save()
        form.save_m2m()

Что я делаю не так? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Получается, что form.save_m2m() был виновником.Если я извлек его из собственного кода и прокомментировал его в django.contrib.admin.options.py (строка 983), ассоциации, а также тег были сохранены.

Очевидно, что это не очень хорошоИдея изменить код django, поэтому я переопределил change_view() в моем ProductAdmin (а ​​также add_view()).Я добавил теги после вызова super(), чтобы form.save_m2m() не переписывал мои ассоциации тегов.

Это странно, потому что это идет вразрез с документацией django-taggit, которая подчеркивает, насколько важно вызывать form.save_m2m(): http://django -taggit.readthedocs.org / en / latest / forms.html

Ну, я не знаю, что случилось, я, вероятно, пойду в taggit группы Google и сообщу 'Эм.В любом случае спасибо Дэвиду за вашу помощь, если pdb не менее УДИВИТЕЛЬНЫЙ, и я не знал об этом раньше:)

0 голосов
/ 11 мая 2011

Какую систему тегов вы используете? Возможно, вам нужно использовать product.tags.save()?

...