Django: сделать пользователя is_active = False - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть модель пользователя и шаблон со списком пользователей с помощью кнопки ОТКЛЮЧИТЬ пользователя, нажав на которую профиль становится неактивным.

models.py

class User(AbstractUser):
    some user fields

    def block_profile(self,*args,**kwargs):
        user = self.user
        user.is_active = False
        user.save()
        messages.success(request, 'Profile successfully disabled.')
        return redirect('index')

views.py

def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles}) 

vstories.html

{% for profile in profiles %}   
    {{ profile.nickname }}
    <button> ??BLOCK_USER?? </button>
{% endfor %}

Правильно ли я написал функцию в модели и какЯ вставляю его в шаблон для вывода кнопки?

1 Ответ

0 голосов
/ 26 апреля 2018

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

views.py

def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles})

def deactivate_user():
    if request.method==POST:
        pk = request.POST.get('pk')
        profile = Profile.objects.get(pk=pk)
        profile.block_profile()

Вам также необходимо добавить URL для этого представления в urls.py

И тогда в вашем шаблоне вы можете использовать простую HTML-форму со скрытым вводом для идентификатора каждого профиля. vstories.html

{% for profile in profiles %}
    <form action="/url_of_your_deactivate_view/" method="post">
      {{ profile.nickname }}
      <input type="hidden" name="pk" value="{{ profile.pk }}">
      <input type="submit" value="Deactivate user">
    </form>
{% endfor %}

Кроме того, я думаю, что ваш метод block_profile должен быть внутри модели Profile, а не модели User.

...