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

时间:2011-05-11 18:44:32

标签: django forms admin django-taggit

坚持到这里...... 从shell中,我可以做到:

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 个答案:

答案 0 :(得分:1)

事实证明form.save_m2m()是罪魁祸首。如果我从我自己的代码中取出它,并在django.contrib.admin.options.py(第983行)中对它进行了注释,则会保存关联和标记。

显然改变django的代码并不是一个好主意,因此我最终在我的ProductAdmin(以及change_view())中覆盖了add_view()。我在调用super()后添加了标记,因此form.save_m2m()不会覆盖我的标记关联。

这很奇怪,因为它直接针对django-taggit的文档,强调了调用form.save_m2m()的重要性:http://django-taggit.readthedocs.org/en/latest/forms.html

好吧,我不知道怎么了,我可能会继续使用taggit谷歌小组并通知他们。在任何情况下都要感谢大卫的帮助,如果没有更少的pdb是真棒而我之前不知道它:)

答案 1 :(得分:0)

您使用的是哪种标记系统?您可能需要使用product.tags.save()