0

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%} 
+0

vous devez ajouter le 'pk' dans votre vue (' def update_profile (demande, pk): ') –

Répondre

0

Vous passez variable pk de urls.py pour voir méthode, mais votre méthode de vue ne s'y attendait pas, vous devez changer votre signature de la méthode de update_profile comme ceci:

update_profile(request, pk) 
    .... 

votre méthode a plus erros à l'intérieur comme celui-ci:

form = UpdateProfile(request.POST, instance=request.User) 

il devrait être probaly:

User = get_user_model() 
user = get_object_or_404(User, pk=pk) #find user instance by id in db 
form = UpdateProfile(request.POST, instance=user) 
+0

Salut Matej, Thx pour votre réponse. Maintenant, j'obtiens une erreur: user = get_object_or_440 (User, pk = pk) même si j'ai importé dans mes vues: de django.shortcuts import render, get_object_or_404, des idées? – Ben2pop

+0

Désolé j'ai fait une faute de frappe dans ma réponse il devrait être par utilisateur = get_object_or_404 (Utilisateur, pk = pk) pas utilisateur = get_object_or_440 (User, pk = pk) je corrige ma réponse. –

+0

J'ai mis à jour avec la traceback .. Je n'ai pas obtenu où est la faute de frappe? – Ben2pop