Open GoogleCodeExporter opened 8 years ago
Same error as http://code.google.com/p/django-tagging/issues/detail?id=226 ?
Original comment by google-c...@jensdiemer.de
on 3 Dec 2009 at 3:53
Sorry, it's not a cache problem.
Think the problem is: The ModelFormset doesn't have a .save_m2m() method.
The tags would only be stored in the model tag CharField, but not in
tagging.models.Tag and tagging.models.TaggedItem
Note: I created with modelformset_factory only a formset with the tag field. It
looks
like this:
{{{
ModelFormset = modelformset_factory(
model=MyTaggedModel, extra=0, fields=("tags",)
)
}}}
My model is not registered with tagging.register(), because then i ran into this
problem: http://code.google.com/p/django-tagging/issues/detail?id=151
Original comment by google-c...@jensdiemer.de
on 3 Dec 2009 at 4:56
I tested it with tagging.register() and then tagging.models.Tag and
tagging.models.TaggedItem updated with the ModelFormset. Why?
Original comment by google-c...@jensdiemer.de
on 3 Dec 2009 at 4:58
Create this unittest for tagging (for insert into tagging/tests/tests.py):
{{{
from django.forms.models import modelformset_factory
class TestTagFieldInFormset(TestCase):
def test_tag_field_in_modelformset(self):
""" TagField in a Modelformset created by modelformset_factory """
FormTest.objects.create(tags=u'test1 test2 test3')
FormTest.objects.create(tags=u'test4 test5')
FormTest.objects.create(tags=u'test6 test7')
ModelFormset = modelformset_factory(model=FormTest, extra=0, fields=("tags",))
formset = ModelFormset(queryset=FormTest.objects.all())
data = {
'form-TOTAL_FORMS': '3', # the number of forms rendered
'form-INITIAL_FORMS': '3', # the number of forms with initial data
'form-0-id': "1",
'form-0-tags': "test1 test2 test3", # Not changed
'form-1-id': "2",
'form-1-tags': "new1 new2",
'form-2-id': "3",
'form-2-tags': "new3 new4",
}
formset = ModelFormset(data, queryset=FormTest.objects.all())
self.failUnless(formset.is_valid(), "formset is not valid: %r" % formset.errors)
instances = formset.save(commit=False)
formset.save_m2m()
# Check the CharField in the FormTest model.
# Note: instances contains only the changed items!
self.failUnlessEqual(len(instances), 2)
self.failUnlessEqual(instances[0].tags, "new1 new2")
self.failUnlessEqual(instances[1].tags, "new3 new4")
# Check the m2m values:
queryset = FormTest.objects.all()
self.failUnlessEqual(queryset[0].tags, "test1 test2 test3")
self.failUnlessEqual(queryset[1].tags, "new1 new2")
self.failUnlessEqual(queryset[2].tags, "new3 new4")
}}}
The last two failUnlessEqual() would be failed, because the formset didn't
updated
tagging.models.Tag and tagging.models.TaggedItem
output:
{{{
FAIL: TagField in a Modelformset created by modelformset_factory
----------------------------------------------------------------------
Traceback (most recent call last):
File "tagging/tests/tests.py", line 966, in test_tag_field_in_modelformset
self.failUnlessEqual(queryset[1].tags, "new1 new2")
AssertionError: u'test4 test5' != 'new1 new2'
}}}
IMHO it's not a django but: formset.save_m2m() teste exists here:
http://code.djangoproject.com/browser/django/trunk/tests/modeltests/model_formse
ts/models.py#L330
Original comment by google-c...@jensdiemer.de
on 4 Dec 2009 at 8:02
Attachments:
Sorry, my unittest is wrong: I forgot to call formset.save() With this,
everything
works fine.
But now i see my original problem. The tagging models Tag and TaggedItem are not
updated, if Formset queryset would be limited with: queryset.only("tags")
I updated the teste here. The teste works if the line with """queryset =
queryset.only("tags")""" would be deleted.
Original comment by google-c...@jensdiemer.de
on 4 Dec 2009 at 9:57
Attachments:
Original issue reported on code.google.com by
google-c...@jensdiemer.de
on 3 Dec 2009 at 3:51