On 09/27/06 23:49, Tom Smith wrote: > Thanks, it all seems to work except for when I store a list of > objects in the database and try to get it out I get a string (that > looks like a list of objects) > > >>> products = Product.objects.filter(title__contains='Dog')[:10] > >>> sub = Subscription(email="[EMAIL PROTECTED]", name="Tom Smith") > >>> sub.encoded_data = products > >>> sub.save() >
You haven't encoded the data before assigning it to the "encoded_data" member. > ...... all fine.... then ..... > > > >>> s = Subscription.objects.get(id=2) > >>> s.encoded_data > "[<Product: Go, Dog, Go (Beginner Books S.)>, <Product: The Practical > Dog Listener: The 30-Day Path to a Lifelong Understanding of Your > Dog>, <Product: Churchill's Black Dog and Other Phenomena of the > Human Mind>, <Product: The Dog Listener>, <Product: Dogsbody>, > <Product: Trixie Tempest and the Amazing Talking Dog: v. 1 (Trixie > Tempest, Tweenage Tearaway S.)>, <Product: A Dog's Best Friend: The > Secrets That Make Good Dog Owners Great>, <Product: The Seven Ages of > Your Dog: A Complete Guide to Understanding and Caring for Your Dog, > from Puppyhood to Old Age>, <Product: It's Me or the Dog: How to Have > the Perfect Pet>, <Product: Love That Dog>]" > > > .... returns it as listy-looking string, not a collection of > objects.... trying to get to data, returns this.... > I guess django figures that the member "encoded_data" is a TextField and converts your queryset to a string when assigning or saving it. > >>> s.data > Traceback (most recent call last): > File "<console>", line 1, in ? > File "/Users/tomsmith/Desktop/django/bah/../bah/burningahole/ > models.py", line 160, in _get_data > return self._decode(self.encoded_data) > File "/Users/tomsmith/Desktop/django/bah/../bah/burningahole/ > models.py", line 168, in _decode > pickled = base64.decodestring(data) > File "/Library/Frameworks/Python.framework/Versions/2.4//lib/ > python2.4/base64.py", line 319, in decodestring > return binascii.a2b_base64(s) > Error: Incorrect padding > >>> > Try this: >>> products = Product.objects.filter(title__contains='Dog')[:10] >>> sub = Subscription(email="[EMAIL PROTECTED]", name="Tom Smith") >>> sub.data = products >>> sub.save() You have to assign the products to the "data" member instead of to "encoded_data". Best to forget that the member encoded_data even exists. So to store something: sub.data = myFancyPythonObject To retrieve something: myFancyPythonObject = sub.data Please note that I have never used this to store QuerySets or Models or the like in the database. Just plain old python objects, preferably dicts. By storing a QuerySet like this you decouple it from the database. I have no idea how this will behave when you decode and try to do something fancy with it later on. The database will most likely have changed in the mean time. cheers Steven --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users -~----------~----~----~----~------~----~------~--~---