我有一个用户模型和一个带有按钮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 %}
我是否在模型中正确编写了函数,如何将其插入模板中以输出按钮?
答案 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模型中。