Bachillikum
Bachillikum

Reputation: 15

'str' object has no attribute 'get' (Django)

Ahoy Mateys!

got a simple model with a simpel form here:

class Hardware(models.Model):
type_name = models.CharField(max_length=60)

def __unicode__(self):
    return self.type_name



class HardwareForm(ModelForm):
    class Meta:
        model = Hardware
        fields = ['type_name']

and this is used by my simple views function:

def createHardware(request):
if request.method == 'POST':
    form = HardwareForm('request.POST')
    if form.is_valid():
        new_hardware = form.save()


        return render_to_response('administration/overview.html')
else:
    form = HardwareForm()

    return render_to_response('administration/create_hardware.html', {
                    'form': form, }, context_instance = RequestContext(request))

this is the Traceback:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/ticket/createHardware/

Django Version: 1.6.6
Python Version: 2.7.8
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'ticket')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  112.                     response = wrapped_callback(request, *callback_args,  **callback_kwargs)
File "C:\Users\bachi_000\workspace\Help\src\ticket\views.py" in createHardware
  155.         if form.is_valid():
File "C:\Python27\lib\site-packages\django\forms\forms.py" in is_valid
  129.         return self.is_bound and not bool(self.errors)
File "C:\Python27\lib\site-packages\django\forms\forms.py" in errors
  121.             self.full_clean()
File "C:\Python27\lib\site-packages\django\forms\forms.py" in full_clean
  273.         self._clean_fields()
File "C:\Python27\lib\site-packages\django\forms\forms.py" in _clean_fields
  282.             value = field.widget.value_from_datadict(self.data, self.files,         self.add_prefix(name))
File "C:\Python27\lib\site-packages\django\forms\widgets.py" in value_from_datadict
  207.         return data.get(name, None)

Exception Type: AttributeError at /ticket/createHardware/
Exception Value: 'str' object has no attribute 'get'

so i got several forms with much more data in it, and there is no problem to pass an empty form to the html page, fill it out and POST them back to the function to get the data in the form. run is_valid() and pass the data to a new instance of the model (to add some more data to it)

why do i get here this error?

Upvotes: 0

Views: 3128

Answers (1)

Tareq
Tareq

Reputation: 788

You need to be passing in a dictionary to your HardwareForm, not a string.

Change in your views.py

form = HardwareForm('request.POST')

to:

form = HardwareForm(request.POST)

Upvotes: 1

Related Questions