简体   繁体   中英

'WSGIRequest' object has no attribute 'Email'

update3

i solved by adding more code below after read tutorial once again , but got error 'WSGIRequest' object has no attribute 'Email' after press button

the link do not have querystring after press save button

def post_new(request):

    #post = get_object_or_404(Post)

    #form = PostForm()

    #return render_to_response(request, 'registration.html', {'pk': 12})

    #return render(request, 'registration.html', {'form': form})
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)

            #post.author = request.user

            post.Email = request.Email

            post.ProjectName = request.ProjectName

            post.UserName = request.UserName

            post.Company = request.Company

            post.Contact = request.Contact

            post.InitialPassword = request.InitialPassword

            post.UserType = request.UserType

            post.BusinessType = request.BusinessType

            post.published_date = timezone.now()

            post.publish()
            #self.published_date = timezone.now()
            return redirect('post_detail', pk=post.pk)
            #isexist = os.path.isfile('newusers.csv') 

            #with open('/home/martin/Downloads/site1/site1/reg/newusers.csv', 'a') as csvfile:

             #fieldnames = ['name','email address','project','initial password','userType','contact','businessType','company']

             #writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

             #if isexist == 0:

              #writer.writeheader()

             #writer.writerow({'name': request.user, 'email address': request.Email, 'project': request.ProjectName, 'initial password': request.InitialPassword,'userType': request.UserType, 'contact': request.Contact, 'businessType': request.BusinessType, 'company': request.Company,})



            return redirect('hello.html', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'registration.html', {'form': form})

update2

after trying many methods, still have error, please download https://drive.google.com/file/d/0Bxs_ao6uuBDUdHFQalFmQmY3U2c/view?usp=sharing

update1

<form method={% url 'post_detail' %}" method="post"" class="post-form">{% csrf_token %}

after the above update, it still does not run post_detail

only have

[25/May/2016 04:07:39] "GET /reg/?csrfmiddlewaretoken=uwMaoReQGeVFVdVdJKmsNWApxVIjyDna&Email=a&ProjectName=a&UserName=a&Company=a&Contact=a&InitialPassword=234&UserType=Cyberport+Tenant&BusinessType=Building HTTP/1.1" 200 2276

it does not go to hello.html, so i guess that it has not run post_detail i do not understand why it pass when url use function name

def post_detail(request, pk):

    post = get_object_or_404(Post, pk=pk)

    if request.method == "POST":

        form = PostForm(request.POST, instance=post)

        if form.is_valid():

            post = form.save(commit=False)

            post.author = request.user
            post.Email = request.Email

            post.ProjectName = request.ProjectName

            post.UserName = request.UserName

            post.Company = request.Company

            post.Contact = request.Contact

            post.InitialPassword = request.InitialPassword

            post.UserType = request.UserType

            post.BusinessType = request.BusinessType

            post.published_date = timezone.now()

            self.published_date = timezone.now()

            #isexist = os.path.isfile('newusers.csv') 

            #with open('/home/martin/Downloads/site1/site1/reg/newusers.csv', 'a') as csvfile:

             #fieldnames = ['name','email address','project','initial password','userType','contact','businessType','company']

            #writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

            #if isexist == false:

             #writer.writeheader()

            #writer.writerow({'name': request.user, 'email address': request.Email, 'project': request.ProjectName, 'initial password': request.InitialPassword,'userType': request.UserType, 'contact': request.Contact, 'businessType': request.BusinessType, 'company': request.Company,})


            return redirect('hello.html', pk=post.pk)

    else:
    render(request, 'hello.html', {'form': form})

        #form = PostForm(instance=post)



    return render(request, 'hello.html', {'form': form})

i follow django girl web and feeling very difficult, expect to go to /reg to fill a form and press save button then go to web /reg/<a number>

just expect to trigger a function after press save button

it has error

Reverse for 'reg/{{post.pk}}/' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

and then try primary key pk , got another error too

/home/martin/Downloads/site1/site1/reg/models.py:37: RemovedInDjango19Warning: Model class site1.reg.models.Post doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9. class Post(models.Model):

i had already added site1.reg.models.Post to MIDDLEWARE_CLASSES but still have error

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'site1.reg.models.Post',
)

registration.html

{% block content %}

    <h1>New user registration</h1>

    <form method="POST" class="post-form">{% csrf_token %}

        {{ form.as_p }}

        <button type="submit" class="save btn btn-default" >Save</button>

    </form>

{% endblock %}

urls.py

from django.conf.urls import include, url

from . import views



urlpatterns = [

    url(r'^reg/$', views.post_new, name='post_new'),

    url(r'^reg/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),

]

views.py

from .forms import PostForm

from django.shortcuts import render

from django.template.loader import get_template



def post_new(request):

    form = PostForm()

    return render(request, 'registration.html', {'form': form})



def post_detail(request, pk):

    post = get_object_or_404(Post, pk=pk)

    if request.method == "POST":

        form = PostForm(request.POST, instance=post)

        if form.is_valid():

            post = form.save(commit=False)

            post.author = request.user

            post.ProjectName = request.ProjectName

            post.UserName = request.UserName

            post.Company = request.Company

            post.Contact = request.Contact

            post.InitialPassword = request.InitialPassword

            post.UserType = request.UserType

            post.BusinessType = request.BusinessType

            post.published_date = timezone.now()

            post.save()

            return redirect('registration.html', pk=post.pk)

    else:

        form = PostForm(instance=post)


    return render(request, 'registration.html', {'form': form})

models.py

from django.db import models

from django.utils import timezone
from django.apps import AppConfig

import csv
import os.path

USERTYPE = (  
    ('Cyberport Tenant', 'Cyberport Tenant'),
    ('SmartSpace User', 'SmartSpace User'),
    ('Cyberport Incubate', 'Cyberport Incubate'),
    ('Collaboration Center Subscriber', 'Collaboration Center Subscriber'),
    ('Cyberport Alumnus', 'Cyberport Alumnus'),
    ('Technology Partner', 'Technology Partner'),
    ('HKOSUG', 'HKOSUG'),
    ('Others', 'Others'),
)


BUSINESSTYPE = (  
    ('Building', 'Building'),
    ('Data Analysis', 'Data Analysis'),
    ('Digital Entertainment', 'Digital Entertainment'),
    ('Education', 'Education'),
    ('Games', 'Games'),
    ('Gaming', 'Gaming'),
    ('ICT', 'ICT'),
    ('Marketing', 'Marketing'),
    ('Social Media', 'Social Media'),
    ('Others', 'Others'),
)


class MyAppConfig(AppConfig):
    name = 'src.my_app_label'

    def ready(self):
        post_migrate.connect(do_stuff, sender=self)


class Post(models.Model):

    author = models.ForeignKey('auth.User')

    Email = models.CharField(max_length=70)
    ProjectName = models.CharField(max_length=70)
    UserName = models.CharField(max_length=70)
    Company = models.CharField(max_length=70)
    Contact = models.CharField(max_length=70)
    InitialPassword = models.CharField(max_length=70)
    UserType = models.CharField(max_length=30, choices=USERTYPE)
    BusinessType = models.CharField(max_length=30, choices=BUSINESSTYPE)
    #UserType = models.ChoiceField(choices=USERTYPE, required=True )
    #BusinessType = models.ChoiceField(choices=BUSINESSTYPE, required=True )

    #ProjectName = models.TextField()

    created_date = models.DateTimeField(default=timezone.now)

    published_date = models.DateTimeField(blank=True, null=True)



    def publish(self):

        self.published_date = timezone.now()
        isexist = os.path.isfile('newusers.csv') 
        with open('/home/martin/Downloads/site1/site1/reg/newusers.csv', 'a') as csvfile:
          fieldnames = ['name','email address','project','initial password','userType','contact','businessType','company']
          writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
          if isexist == false:
             writer.writeheader()
          writer.writerow({'name': UserName, 'email address': Email, 'project': ProjectName, 'initial password': InitialPassword,'userType': UserType, 'contact': Contact, 'businessType': BusinessType, 'company': Company,})


        self.save()



    def __str__(self):

        return self.title

forms.py

from django import forms



from .models import Post


USERTYPE = (  
    ('Cyberport Tenant', 'Cyberport Tenant'),
    ('SmartSpace User', 'SmartSpace User'),
    ('Cyberport Incubate', 'Cyberport Incubate'),
    ('Collaboration Center Subscriber', 'Collaboration Center Subscriber'),
    ('Cyberport Alumnus', 'Cyberport Alumnus'),
    ('Technology Partner', 'Technology Partner'),
    ('HKOSUG', 'HKOSUG'),
    ('Others', 'Others'),
)


BUSINESSTYPE = (  
    ('Building', 'Building'),
    ('Data Analysis', 'Data Analysis'),
    ('Digital Entertainment', 'Digital Entertainment'),
    ('Education', 'Education'),
    ('Games', 'Games'),
    ('Gaming', 'Gaming'),
    ('ICT', 'ICT'),
    ('Marketing', 'Marketing'),
    ('Social Media', 'Social Media'),
    ('Others', 'Others'),
)



class PostForm(forms.ModelForm):



    #if form.is_valid():

     #post = form.save(commit=False)

     #post.author = request.user

     #post.published_date = timezone.now()

     #post.save()m

    class Meta:

        model = Post

        fields = ('Email', 'ProjectName', 'UserName', 'Company', 'Contact', 'InitialPassword','UserType','BusinessType')
    #fields = ('title', 'text',)
        UserType = forms.ChoiceField(choices=USERTYPE, required=True )
        BusinessType = forms.ChoiceField(choices=BUSINESSTYPE, required=True )

This is not a valid syntax:

<form method={% url 'post_detail' %}" method="post"" class="post-form">

The url you want to post the form to should be in action attribute:

<form action="{% url 'post_detail' %}" method="post"" class="post-form">

urls.py

from django.conf.urls import url
from views import post_detail
urlpatterns = [
   url(r'^reg/(?P<pk>[0-9A-Za-z]+)/$',
       post_detail,
       name='post_detail'),
]

template.html
pass "pk" value from views

<form action="{% url 'post_detail' pk=pk %}" method="post" class="post-form">

url structure in templates is {% url 'namespace:name' args, kwargs goes here %}

i use post instead of request and add more code in post_new

def post_new(request):

    #post = get_object_or_404(Post)

    #form = PostForm()

    #return render_to_response(request, 'registration.html', {'pk': 12})

    #return render(request, 'registration.html', {'form': form})

    if request.method == "POST":

        form = PostForm(request.POST)

        if form.is_valid():

            post = form.save(commit=False)

            #post.author = request.user

            #post.Email = request.Email

            #post.ProjectName = request.ProjectName

            #post.UserName = request.UserName

            #post.Company = request.Company

            #post.Contact = request.Contact

            #post.InitialPassword = request.InitialPassword

            #post.UserType = request.UserType

            #post.BusinessType = request.BusinessType

            #post.published_date = timezone.now()

            #post.publish()

            #self.published_date = timezone.now()

            #return redirect('post_detail', pk=post.pk)

            isexist = os.path.isfile('/home/martin/Downloads/site1/site1/reg/newusers.csv') 

            with open('/home/martin/Downloads/site1/site1/reg/newusers.csv', 'a') as csvfile:

             fieldnames = ['name','email address','project','initial password','userType','contact','businessType','company']

             writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

             print "isexist"

             print isexist

             if isexist == 0:

              writer.writeheader()

             writer.writerow({'name': post.UserName, 'email address': post.Email, 'project': post.ProjectName, 'initial password': post.InitialPassword,'userType': post.UserType, 'contact': post.Contact, 'businessType': post.BusinessType, 'company': post.Company,})



            return render(request, 'approval.html', {'form': form})

    else:

        form = PostForm()

    return render(request, 'registration.html', {'form': form})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM