3

I am studying Django form without model.
Next stage will be form with model and finally form + model + crispy Right now I am stopped by request.data

Django: 1.10 Python: 3.6.0

The root cause is request does not has attribute data

(Pdb) dir(request)
['COOKIES', 'FILES', 'GET', 'META', 'POST', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_body', '_encoding', '_files', '_get_files', '_get_post', '_get_raw_host', '_get_scheme', '_initialize_handlers', '_load_post_and_files', '_mark_post_parse_error', '_messages', '_post', '_post_parse_error', '_read_started', '_set_post', '_stream', '_upload_handlers', 'body', 'build_absolute_uri', 'close', 'content_params', 'content_type', 'csrf_processing_done', 'encoding', 'environ', 'get_full_path', 'get_host', 'get_port', 'get_raw_uri', 'get_signed_cookie', 'is_ajax', 'is_secure', 'method', 'parse_file_upload', 'path', 'path_info', 'read', 'readline', 'readlines', 'resolver_match', 'scheme', 'session', 'upload_handlers', 'user', 'xreadlines']

base.py:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    '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',
]


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR.path('templates')
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

forms.py:

from django import forms


class PersonDetailForm(forms.Form):
    name = forms.CharField(max_length=100)
    age = forms.IntegerField()

views.py:

class ColorStudyView(View):
    template_name = 'colors/study.html'
    form_class = PersonDetailForm

    def get(self, request, format=None):
        form = self.form_class
        return render(
            request,
            self.template_name,
            {'form': form}
        )

    def post(self, request, format=None):
        form = self.form_class(request.data)
        if form.is_valid():
            return HttpResponse("Good POST")
        else:
            return render(
                request,
                self.template_name,
                {'form': form}
            )

study.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Study</title>
    <form method="post">
        {% csrf_token %}
        <table>{{ form.as_table }}</table>
        <input type="submit" value="Submit" />
    </form>
</head>
<body>

</body>
</html>

GET: Works fine
POST: Django raises AttributeError: 'WSGIRequest' object has no attribute 'data'

Where am I miss?

joe
  • 8,383
  • 13
  • 61
  • 109
  • 1
    Check [this answer](http://stackoverflow.com/questions/6907388/updating-context-data-in-formview-form-valid-method). – nik_m Apr 09 '17 at 06:49
  • 1
    Start from your keyword `FormView`. Now I found what I want. Thank you very much. – joe Apr 09 '17 at 07:15
  • @joe i am running into the same issue you had 5 years ago now, please what do you mean by start from your keyword ```FormView``` – Destiny Franks Apr 13 '22 at 15:54
  • @DestinyFranks Follow nik_m link and you will found jorelli's answer. – joe Apr 15 '22 at 01:23

0 Answers0