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.