Django:make user is_active = False

时间:2018-04-26 08:41:23

标签: django django-models django-templates

我有一个用户模型和一个带有按钮DISABLE用户列表的模板,通过点击哪个配置文件变为非活动状态。

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 :(得分:1)

您不能简单地将模型的方法添加到模板中,您需要为此编写视图。您可以使用POST方法来捕获要停用的配置文件的ID:

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

您还需要在 urls.py

中为此视图添加一些网址

然后在您的模板中,您可以使用一个简单的html表单,其中隐藏的输入用于每个配置文件的ID。 的 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模型中。