Going nuts over here... From within the shell, I can do:
product.tags.add("a_new_tag")
The tag is added to the db, and the tag association with the product works correctly. (i.e., when I do Product.objects.filter(tags__name__in=["a_new_tag"]
the appropriate product spits out)
What I need to do is add some tags in the admin when the form is processed.
Here is my form code (read the comments in lines 4 and 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 sav开发者_JS百科ed to the taggit db, but the association with the product isn't kept.
product.save()
self.save_m2m()
return m
I tried to do the saving in the admin class instead, but this doesn't work either:
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()
What am I doing wrong? Thanks in advance!
So it turns out that form.save_m2m()
was the culprit. If I took it out of my own code, and commented it out in django.contrib.admin.options.py (line 983), the associations as well as the tag were saved.
Obviously it's not a good idea to change django's code, so I ended up overriding change_view()
in my ProductAdmin (as well as add_view()
). I added the tags after calling super()
, so form.save_m2m()
wouldn't overwrite my tag associations.
This is strange because it goes directly against django-taggit's documentation which emphasizes how important it is to call form.save_m2m()
: http://django-taggit.readthedocs.org/en/latest/forms.html
Well I dunno what's up, I'll probably go on the taggit google groups and notify 'em. In any case thanks David for your help, if nothing less pdb is AWESOME and I did not know about it before :)
Which tagging system are you using? Possibly you need to use product.tags.save()
?
精彩评论