سؤال

I tried to implement the code for editing the Django admin panel. It ran without any errors, but it did not update the relevant data fields in the database. Here is my code for updating the database table.

views.py

   @login_required
   def edit_profile(request):
    if request.POST:
    if 'logout' in request.POST:
        return HttpResponseRedirect('/logout/')

    elif 'save' in request.POST:
        user = User.objects.get(username= request.user)
        user.user=request.POST.get('user')
                    user.name=request.POST.get('name')
        user.address=request.POST.get('address')
        user.designation=request.POST.get('designation')                        
        user.email=request.POST.get('email') 
        user.role=request.POST.get('role')
        user.project=request.POST.get('project')                        
        user.task=request.POST.get('task')
        user.save()
        return HttpResponseRedirect('/view_profile/')




                   # user.set_password(form.cleaned_data['password'])

                    #drinker=user.get_profile();
                    #drinker.name=form.cleaned_data['name']
                    #drinker.address=form.cleaned_data['address']
                    #drinker.save()

    elif 'cancel' in request.POST:
        return                 HttpResponseRedirect('/view_profile/')               


user_profile = request.user.get_profile()
return render_to_response('edit_profile.html',{'profile':user_profile },context_instance=RequestContext(request))

HTML Template

     {% block content %}

<form action="." method="post">
{% csrf_token %}    

    <input type="submit" value="Logout" name="logout" />
    <br/>
    User:
    <input type="text" name="user" value="{{ profile.user}}" /><br />
    Name:
    <input type="text" name="name" value="{{ profile.name}}" /><br />

    Address:
    <input type="text" name="address" value="{{ profile.address}}" /><br />
    Designation:
    <input type="text" name="designation" value="{{ profile.designation}}" /><br />

    Email:
    <input type="text" name="email" value="{{ profile.email}}" /><br />
    Role:
    <input type="text" name="role" value="{{ profile.role}}" /><br />

    Project:
    <input type="text" name="project" value="{{ profile.project}}" /><br />
    Task:
    <input type="text" name="task" value="{{ profile.task}}" /><br />

    <input type="submit" value="Save Changes" name="save" />
    <input type="submit" value="Cancel" name="cancel" />
    <br/>
</form>

   {% endblock %}

Please help me to resolve this problem.

`

هل كانت مفيدة؟

المحلول

Your code

user = User.objects.get(username=request.user)
//equivalent to ex. (jay=1)

Maybe you should change this line to

user = User.objects.get(username=request.user.username)

or

user = User.objects.get(pk=request.user.id)

Based in your code you define fields that are not in the User model

user = User.objects.get(username= request.user)
user.name=request.POST.get('name')
user.address=request.POST.get('address') <-----
user.designation=request.POST.get('designation') <----                        
user.email=request.POST.get('email') 
user.role=request.POST.get('role') <-----
user.project=request.POST.get('project') <----                       
user.task=request.POST.get('task') <-----
user.save()

I don't know where these fields came from. If you wish to save those information, you must define a separate model for that fields.

UPDATE:

@login_required
def edit_profile(request):
    if request.POST:
        user = User.objects.get(pk=request.user.id)
        user.username=request.POST.get('user')                    
        user.email=request.POST.get('email') 
        user.save()

        employee = Employee.objects.get(user=request.user)
        employee.name=request.POST.get('name')
        employee.address=request.POST.get('address')
        employee.designation=request.POST.get('designation')                        
        employee.role=request.POST.get('role')
        employee.project=request.POST.get('project')                        
        employee.task=request.POST.get('task')
        employee.save()

        return HttpResponseRedirect('/view_profile/')            

    user_profile = request.user.get_profile()
    return render_to_response('edit_profile.html',{
        'profile':user_profile 
    },context_instance=RequestContext(request))


<form action="." method="post">
    {% csrf_token %}    
    User:
    <input type="text" name="user" value="{{ profile.user.username}}" /><br />
    Name:
    <input type="text" name="name" value="{{ profile.name}}" /><br />

    Address:
    <input type="text" name="address" value="{{ profile.address}}" /><br />
    Designation:
    <input type="text" name="designation" value="{{ profile.designation}}" /><br />

    Email:
    <input type="text" name="email" value="{{ profile.email}}" /><br />
    Role:
    <input type="text" name="role" value="{{ profile.role}}" /><br />

    Project:
    <input type="text" name="project" value="{{ profile.project}}" /><br />
    Task:
    <input type="text" name="task" value="{{ profile.task}}" /><br />

    <input type="submit" value="Save Changes" name="save" />
    <input type="reset" value="Cancel" name="cancel" />
    <br/>
</form>

That's the way to save it but sorry I don't know your Employee model fields exactly so I just guess on it based on the variables you use.

نصائح أخرى

If I remember correctly, request.user is an instance of the Django model for the user who made the request, so the line...

user = User.objects.get(username= request.user)

...could simply be...

user = request.user

...but I could be wrong.

Update

It occurs to me that, if the original version of the code, which contained the line...

user = User.objects.get(username= request.user)

...didn't raise an exception, then it's possible it's not even being executed. If you're running from the Django built-in runserver command, try printing out the contents of the request variable at the top of the function.

class ProfileView(UpdateView):
    model = User
    template_name = 'profile.html'
    slug_url_kwarg = 'username'
    slug_field = 'username'

    def get_object(self, queryset=None):
        obj = super(ProfileView, self).get_object(queryset)
        if not self.request.user or self.request.user.pk != obj.pk:
            raise Http404('nope')
        return obj

url route:

url(r'profileedit/(?P<username>[a-z-\d-]+)/$', ProfileView.as_view(), name='profile_view')

and template is obvious, I guess

you can create a new form like this (myExample):

class userForm(ModelForm):

    class Meta:
        model = Usuario
        fields = ['userName','name', 'lastName', 'email', 'description', 'image']}

Then in your views file and your method add the Form with an Object Instance Like:

myUser = User.objects.get(id=request.session['userId'])
form = userForm(request.POST, instance=myUser)

now you can pass this form with the fields full

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top