Re: More DJango Tagging Oracle Issues
I have confirmed that it also works as expected with cx_Oracle-5.0.1 Woohoo On Mar 24, 2:14 pm, Brandon Taylorwrote: > After much digging, I was able to find the problem. In fields.py in > django-tagging, the tags are pulled from cache when they are saved, > rather than going back to the database. > > The problem I was seeing wasn't that tags werent' being applied to > objects, or added to the database, but the input field was NOT > reflecting the changes to the tags. The cache was not being set with > the new values. > > So, I found a ticket on the tagging > site:http://code.google.com/p/django-tagging/issues/detail?id=28=1=c... > > Which has a patch, but that doesn't work for the svn checkout of > django-tagging. I changed the _post_init method to: > > #fields.py > def contribute_to_class(self, cls, name): > super(TagField, self).contribute_to_class(cls, name) > > # Make this object the descriptor for field access. > setattr(cls, self.name, self) > > # Save tags back to the database post-save > signals.post_save.connect(self._save, cls, True) > signals.post_init.connect(self._post_init, cls, True) #wire it > up here > > def _post_init(self, **kwargs): > instance = kwargs['instance'] > if instance._get_pk_val() is None: > self._set_instance_tag_cache(instance, '') > else: > self._set_instance_tag_cache(instance, edit_string_for_tags > (Tag.objects.get_for_object(instance))) > #this re-sets the tags from the database > > This caused some interesting behavior on the form field. Instead of > tags being separated by commas, and multi-word tags being enclosed in > quotes, everything was just separated by a space. This causes tags to > be improperly assigned on the next save. So, I changed the > edit_string_for_tags method to: > > def edit_string_for_tags(tags): > names = [] > for tag in tags: > name = tag.name > if u' ' in name: > names.append('"%s"' % name) > continue > names.append(name) > > return ', '.join(names) > > Now tags are properly formatted in my tags text field, and tags are > properly assigned to objects. This also does not break compatibility > with other DB types for me. Last step will be to replace my > cx_Oracle-4.4.1 driver with the latest 5.0.1, and see if it still > works. > > Hope this helps someone out! > > Cheers, > Brandon > > On Mar 23, 5:40 pm, Brandon Taylor wrote: > > > Hi Ian, > > > I'm not that familiar with Oracle, so I have no idea if the problems > > I'm experiencing are related in some way to permissions, etc, but I > > have been reassured by my Oracle person that my user has full > > permissions on my schema. > > > That being said, the TagField() will show up in admin when specifying: > > > from tagging.fields import TagField > > > class MyModel(models.Model): > > tags = TagField() > > > When I create a new record, any tags that I have entered will be saved > > to the tagging tables and associated to the record. However, when I > > update the record, and add tags that aren't already present, or remove > > all of the tags, no changes to the record will occur. All of the tags > > that were there when I created the record are still there, but no new > > tags, and no tags removed. > > > If I take the *exact* same model code, and switch my database to > > SQLite or MySQL, I have no issues. I can only deduce that it's > > something either wrong with my Oracle permissions, or with cx_Oracle > > itself. I have wiped out my tables, re-validated, re-sync'd. Quadruple- > > checked my code. And still the same problem. But yes, at least I can > > add tags. > > > Perplexed, > > Brandon > > > On Mar 23, 4:31 pm, Ian Kelly wrote: > > > > On Mar 23, 1:52 pm, Brandon Taylor wrote: > > > > > Hi Everyone, > > > > > Is anyone having issues with Django Tagging (svn) not updating tags on > > > > an existing model? I'm running cx_Oracle-4.4.1 - thanks to (Ian Kelly) > > > > and Django Trunk. > > > > Hmm. I tried running the same model you posted before with Python 2.6 > > > and cx_Oracle 5.0.1, and I can't see that it makes any difference; it > > > still works for me. Glad you got it (at least partially) working, > > > though. > > > > > I can add tags when a model instance is created, but update/delete is > > > > not working. > > > > Can you be more specific? It seems to be working for me. > > > > Regards, > > > Ian --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en
Re: More DJango Tagging Oracle Issues
After much digging, I was able to find the problem. In fields.py in django-tagging, the tags are pulled from cache when they are saved, rather than going back to the database. The problem I was seeing wasn't that tags werent' being applied to objects, or added to the database, but the input field was NOT reflecting the changes to the tags. The cache was not being set with the new values. So, I found a ticket on the tagging site: http://code.google.com/p/django-tagging/issues/detail?id=28=1=cache Which has a patch, but that doesn't work for the svn checkout of django-tagging. I changed the _post_init method to: #fields.py def contribute_to_class(self, cls, name): super(TagField, self).contribute_to_class(cls, name) # Make this object the descriptor for field access. setattr(cls, self.name, self) # Save tags back to the database post-save signals.post_save.connect(self._save, cls, True) signals.post_init.connect(self._post_init, cls, True) #wire it up here def _post_init(self, **kwargs): instance = kwargs['instance'] if instance._get_pk_val() is None: self._set_instance_tag_cache(instance, '') else: self._set_instance_tag_cache(instance, edit_string_for_tags (Tag.objects.get_for_object(instance))) #this re-sets the tags from the database This caused some interesting behavior on the form field. Instead of tags being separated by commas, and multi-word tags being enclosed in quotes, everything was just separated by a space. This causes tags to be improperly assigned on the next save. So, I changed the edit_string_for_tags method to: def edit_string_for_tags(tags): names = [] for tag in tags: name = tag.name if u' ' in name: names.append('"%s"' % name) continue names.append(name) return ', '.join(names) Now tags are properly formatted in my tags text field, and tags are properly assigned to objects. This also does not break compatibility with other DB types for me. Last step will be to replace my cx_Oracle-4.4.1 driver with the latest 5.0.1, and see if it still works. Hope this helps someone out! Cheers, Brandon On Mar 23, 5:40 pm, Brandon Taylorwrote: > Hi Ian, > > I'm not that familiar with Oracle, so I have no idea if the problems > I'm experiencing are related in some way to permissions, etc, but I > have been reassured by my Oracle person that my user has full > permissions on my schema. > > That being said, the TagField() will show up in admin when specifying: > > from tagging.fields import TagField > > class MyModel(models.Model): > tags = TagField() > > When I create a new record, any tags that I have entered will be saved > to the tagging tables and associated to the record. However, when I > update the record, and add tags that aren't already present, or remove > all of the tags, no changes to the record will occur. All of the tags > that were there when I created the record are still there, but no new > tags, and no tags removed. > > If I take the *exact* same model code, and switch my database to > SQLite or MySQL, I have no issues. I can only deduce that it's > something either wrong with my Oracle permissions, or with cx_Oracle > itself. I have wiped out my tables, re-validated, re-sync'd. Quadruple- > checked my code. And still the same problem. But yes, at least I can > add tags. > > Perplexed, > Brandon > > On Mar 23, 4:31 pm, Ian Kelly wrote: > > > On Mar 23, 1:52 pm, Brandon Taylor wrote: > > > > Hi Everyone, > > > > Is anyone having issues with Django Tagging (svn) not updating tags on > > > an existing model? I'm running cx_Oracle-4.4.1 - thanks to (Ian Kelly) > > > and Django Trunk. > > > Hmm. I tried running the same model you posted before with Python 2.6 > > and cx_Oracle 5.0.1, and I can't see that it makes any difference; it > > still works for me. Glad you got it (at least partially) working, > > though. > > > > I can add tags when a model instance is created, but update/delete is > > > not working. > > > Can you be more specific? It seems to be working for me. > > > Regards, > > Ian --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: More DJango Tagging Oracle Issues
Hi Ian, I'm not that familiar with Oracle, so I have no idea if the problems I'm experiencing are related in some way to permissions, etc, but I have been reassured by my Oracle person that my user has full permissions on my schema. That being said, the TagField() will show up in admin when specifying: from tagging.fields import TagField class MyModel(models.Model): tags = TagField() When I create a new record, any tags that I have entered will be saved to the tagging tables and associated to the record. However, when I update the record, and add tags that aren't already present, or remove all of the tags, no changes to the record will occur. All of the tags that were there when I created the record are still there, but no new tags, and no tags removed. If I take the *exact* same model code, and switch my database to SQLite or MySQL, I have no issues. I can only deduce that it's something either wrong with my Oracle permissions, or with cx_Oracle itself. I have wiped out my tables, re-validated, re-sync'd. Quadruple- checked my code. And still the same problem. But yes, at least I can add tags. Perplexed, Brandon On Mar 23, 4:31 pm, Ian Kellywrote: > On Mar 23, 1:52 pm, Brandon Taylor wrote: > > > Hi Everyone, > > > Is anyone having issues with Django Tagging (svn) not updating tags on > > an existing model? I'm running cx_Oracle-4.4.1 - thanks to (Ian Kelly) > > and Django Trunk. > > Hmm. I tried running the same model you posted before with Python 2.6 > and cx_Oracle 5.0.1, and I can't see that it makes any difference; it > still works for me. Glad you got it (at least partially) working, > though. > > > I can add tags when a model instance is created, but update/delete is > > not working. > > Can you be more specific? It seems to be working for me. > > Regards, > Ian --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
Re: More DJango Tagging Oracle Issues
On Mar 23, 1:52 pm, Brandon Taylorwrote: > Hi Everyone, > > Is anyone having issues with Django Tagging (svn) not updating tags on > an existing model? I'm running cx_Oracle-4.4.1 - thanks to (Ian Kelly) > and Django Trunk. Hmm. I tried running the same model you posted before with Python 2.6 and cx_Oracle 5.0.1, and I can't see that it makes any difference; it still works for me. Glad you got it (at least partially) working, though. > I can add tags when a model instance is created, but update/delete is > not working. Can you be more specific? It seems to be working for me. Regards, Ian --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---
More DJango Tagging Oracle Issues
Hi Everyone, Is anyone having issues with Django Tagging (svn) not updating tags on an existing model? I'm running cx_Oracle-4.4.1 - thanks to (Ian Kelly) and Django Trunk. I can add tags when a model instance is created, but update/delete is not working. TIA, Brandon --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~--~~~~--~~--~--~---