J'ai un problème avec mon processus d'authentification. Je crée un processus SignIN donnant à un utilisateur la possibilité de créer un nouveau compte en utilisant seulement son courrier, compte qui sera inactif jusqu'à ce qu'il l'édite en fournissant son prénom, son nom et un mot de passe. Je lui ai donné un essai, mais je vais à l'URL pour modifier le profil que je reçois une erreur liée à la PK ..Enregistrement Django, problème de clé primaire
erreur:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/registration/users/2/edit/
Django Version: 1.11.3
Python Version: 3.6.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'registration']
Installed 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']
Traceback:
File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/raphaelbendenoun/Documents/testregis/registration/views.py" in update_profile
41. user = get_object_or_440(User, pk=pk) #find user instance by id in db
Exception Type: NameError at /registration/users/2/edit/
Exception Value: name 'get_object_or_440' is not defined
'pk'
urls:
from django.conf.urls import url, include
from registration import views
app_name = 'registration'
urlpatterns = [
url(r'^register/$', views.register, name='register'),
url(r'^users/(?P<pk>\d+)/edit/$', views.update_profile, name="edit-user-profile"),
]
form.py :
from django import forms
from django.contrib.auth.models import User
from .models import MyUser
from django.contrib.auth import get_user_model
User = get_user_model()
class Form(forms.ModelForm):
password = forms.CharField(widget= forms.PasswordInput())
class Meta():
model = User
fields= ('first_name','last_name','email','password','company')
class InactiveForm(forms.ModelForm):
class Meta():
model = User
fields= ('email',)
class UpdateProfile(forms.ModelForm):
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
password = forms.CharField(widget= forms.PasswordInput())
class Meta:
model = User
fields = ('email', 'first_name', 'last_name','password')
def clean_email(self):
email = self.cleaned_data.get('email')
if email and User.objects.filter(email=email).count():
raise forms.ValidationError('This email address is already in use. Please supply a different email address.')
return email
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
views.py
from django.shortcuts import render
from django.views import generic
from django.views.generic import TemplateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from .forms import InviteForm
from invitations.models import Invitation
from .models import project
from django.core.urlresolvers import reverse
# Create your views here.
class HomePage(TemplateView):
template_name= 'index.html'
class CandidateIndex(TemplateView):
template_name= 'candidateIndex.html'
class HRIndex(TemplateView):
template_name= 'HRindex.html'
class ProjectDetailView(generic.DetailView):
model = project
template_name = 'project_details.html'
class ProjectCreate(CreateView):
model = project
fields = ['project_name']
template_name = 'project_form.html'
def create_invite(request):
if request.method == "POST":
invite_form = InviteForm(data=request.POST)
if invite_form.is_valid():
email1 = invite_form.cleaned_data['email1']
email2 = invite_form.cleaned_data['email2']
email3 = invite_form.cleaned_data['email3']
email4 = invite_form.cleaned_data['email4']
email5 = invite_form.cleaned_data['email5']
for i in invite_form.cleaned_data:
invite = Invitation.create(i)
invite.send_invitation(request)
print("The mail was went")
#return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk})
else:
print("Your form is not valid")
else:
invite_form = InviteForm()
return render(request, 'team_invite.html', {'invite_form': invite_form})
project_detail.html:
{% extends 'base.html' %}
{% block body %}
<div class="container">
<div class="jumbotron">
<h2>Welcome to your Project {{project.project_name}} Detail page</h2>
</div>
<div class="invite-team">
<a href="{% url 'website:addteam' %}">GOGO</a>
</div>
</div>
{% endblock%}
vous devez ajouter le 'pk' dans votre vue (' def update_profile (demande, pk): ') –