I ran into something weird in Django and i'm completely stumped. I got
it to work but i'm trying to understand the logic behind it.

I have the following data model:

from django.db import models

class Setting(models.Model):
    name  = models.CharField(max_length=200)
    value = models.TextField()

    class Meta:
        db_table = "t_settings"

    def __unicode__(self):
        return self.name

I have the following form model:

from django import forms

class GlobalSettingsForm(forms.Form):
    # specify all the variables here
    site_name = forms.CharField(required=True,
                                max_length=200,
                                label="Site Name",
                                help_text="What you want your site to
be called company name, personal name, etc."
                                )

    site_tagline = forms.CharField(required=False,
                                   max_length=200,
                                   label="Site Tagline",
                                   help_text="A quick tag line on what
your site is about")

    site_url = forms.URLField(required=True,
                              label="Site URL",
                              max_length=200,
                              help_text="All links that reference your
site will use this url. I would not change this unless you are super
sure." )



>From the shell I have the following code to create the form:

form = GlobalSettingsForm(data={'site_name':'test','site_url':'http://
localhost/','site_tagline':'test'})

Running a type on form i get: <class
't_settings.forms.GlobalSettingsForm'> , perfect so far...

next I call form.is_valid() to get the cleaned_data attribute and all
is good.

form.cleaned_data returns {'site_name': u'test', 'site_tagline':
u'test', 'site_url': u'http://localhost/'} as expected

now i want to change the information in the database so I loop through
cleaned_data, grab the object, and save:

for item in form.cleaned_data:
    setting = Setting.objects.filter(name=item)
    setting[0].value = form.cleaned_data[item]
    setting[0].save()

but it does not work. setting[0].value = form.cleaned_data[item] fails
to assign the data

if i run it like this it works:

for item in form.cleaned_data:
    setting = Setting.objects.get(name__exact=item)
    setting.value = form.cleaned_data[item]
    setting.save()

all i did was change the method used from filter to get, why does one
work and not the other??

if i create the objects individually and equate them they are the
same:
setting = Setting.objects.get(name__exact=item)
setting2 = Setting.objects.filter(name=item)

setting2[0] == setting it equals True
type(setting2[0]) == setting it equals True

Also I am using, Django 1.1 with MySql Python...

Stumped.

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to