Django Taggit - 标记关联未从自定义管理表单中保存

标签 django forms admin django-taggit

在这里发疯...
在外壳中,我可以执行以下操作:

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()

我究竟做错了什么?提前致谢!

最佳答案

原来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 谷歌群组并通知他们。无论如何,感谢大卫的帮助,如果没有什么比 pdb 更棒而且我以前不知道的话:)

关于Django Taggit - 标记关联未从自定义管理表单中保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969054/

相关文章:

django - 使用 django + nginx + flup 时打印语句写到哪里?

python - Django : using admin datepicker

javascript - 如何取消ajax加载

php - 使用 javascript 到 php 的表单验证

facebook - 在验证 w3c 的 facebook 元标记中没有属性 "property"

python - 名称未在 Django 模型中定义

python - 如何删除 Django 1.7 中的现有迁移

javascript在不提交表单的情况下获取选择选项的值

python - Web2py 票证无效链接

php - 从PHP页面上传的blob图像从二进制图像转换为数据库中的真实图像?