2013-04-12 3 views
0

Я попытался реализовать код для редактирования панели администратора Django. Он работал без каких-либо ошибок, но не обновлял соответствующие поля данных в базе данных. Вот мой код для обновления таблицы базы данных.Django admin: Как разрешить пользователям редактировать профиль?

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 шаблона

 {% 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 %} 

Пожалуйста, помогите мне решить эту проблему.

`

+0

Это не ясно, если вы пытаетесь, чтобы позволить пользователям редактировать свой собственный профиль, или если вы пытаетесь, чтобы позволить пользователям персонала редактировать профили других пользователей. Что он? – Aya

+0

это позволяет пользователю редактировать свой профиль – Lahiruzz

+0

не делайте этого в admin (у пользователей нет доступа) и используйте 'ModelForm' для него, это намного проще. – yedpodtrzitko

ответ

1

Ваш код

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

Может быть, вы должны изменить эту строку

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

или

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

На основе вашего кода можно определить поля, которые не являются в модели пользователя

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() 

Я не знаю, откуда пришли эти поля. Если вы хотите сохранить эту информацию, вы должны определить отдельную модель для этих полей.

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> 

Это путь, чтобы спасти его, но жаль, что я не знаю вашу модель поля Employee именно поэтому я просто предполагаю, что на нем основаны на переменных, которые вы используете.

+0

По-прежнему не работает :( – Lahiruzz

+0

Ok wait Я обновлю свой код, потому что обнаружил в вашем коде еще одну ошибку – catherine

+0

здесь Я определил форму в файле html и используя метод post, я передаю значения.i checked 'request.POST. get ('name') '& it передает конкретное значение. Проблема не сохраняет данные прохода в таблице базы данных. Я не знаю, почему – Lahiruzz

0

Если я правильно помню, request.user является экземпляром модели Django для пользователя, который сделал запрос, поэтому линия ...

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

... может быть просто ...

user = request.user 

... но я мог ошибаться.

Update

Это происходит со мной, что, если первоначальный вариант кода, который содержит строку ...

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

... не возбудит исключение, то возможно, это даже не выполняется. Если вы работаете с встроенной командой Django runserver, попробуйте распечатать содержимое переменной request в верхней части функции.

+0

никаких ошибок. но база данных не обновлялась :( – Lahiruzz

+0

В этом случае на самом деле нет достаточно информации для диагностики проблемы. Возможно, вам придется опубликовать больше вашего кода. – Aya

+0

Я добавил более подробную информацию. – Lahiruzz

0
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 маршрута:

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

и шаблон очевидно, я думаю

0

вы можете создать новую форму, как это (myExample):

class userForm(ModelForm): 

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

Тогда в вашем файл представлений и ваш метод добавьте форму с экземпляром объекта.:

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

теперь вы можете передать эту форму с полями полными

Смежные вопросы