Django:make user\u active=False

Django:make user\u active=False,django,django-models,django-templates,Django,Django Models,Django Templates,我有一个用户模型和一个模板,其中包含用户列表和按钮,通过单击哪个配置文件变为非活动状态来禁用用户 型号.py class User(AbstractUser): some user fields def block_profile(self,*args,**kwargs): user = self.user user.is_active = False user.save() messages.success(re

我有一个用户模型和一个模板,其中包含用户列表和按钮,通过单击哪个配置文件变为非活动状态来禁用用户

型号.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')
def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles}) 
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()
视图.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')
def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles}) 
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()
vstories.html

{% for profile in profiles %}   
    {{ profile.nickname }}
    <button> ??BLOCK_USER?? </button>
{% endfor %}
{% 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 %}
{%用于配置文件中的配置文件%}
{{profile.nickname}
?模块用户??
{%endfor%}

我是否在模型中正确编写了函数,以及如何将其插入模板以输出按钮?

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

视图.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')
def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles}) 
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.py中为此视图添加一些url

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')
def user_list(request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles}) 
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()
然后在模板中,您可以使用一个简单的html表单,为每个概要文件的id隐藏输入。 vstories.html

{% for profile in profiles %}   
    {{ profile.nickname }}
    <button> ??BLOCK_USER?? </button>
{% endfor %}
{% 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 %}
{%用于配置文件中的配置文件%}
{{profile.nickname}
{%endfor%}

另外,我认为你的block_profile方法应该在profile模型中,而不是用户模型中。

如果你在views.py而不是models.py中编写功能更改,效果会更好。在这种情况下,我需要创建一个额外的url和模板,或者我可以不使用它吗?是否可以在没有新页面重定向的情况下在同一页面中创建新状态?是的,您必须创建一个新url,并且可以使用ajax调用来避免刷新OK,我现在就尝试一下。我得到错误“Profile”对象没有属性“deactivate”,我调用了deactivate()方法作为示例。在您的情况下,它被称为block_profile()。正如我前面提到的,你应该将这个方法移动到你的个人资料模型中。我已经编辑了答案。检查views.pyit中的block_profile(),最重要的是,它可以在不访问其他url的情况下工作!!谢谢