【问题标题】:Add a button to update a field in django添加一个按钮以更新 django 中的字段
【发布时间】:2020-12-01 11:25:26
【问题描述】:

我想在我的 html 中添加一个按钮,它可以自动将客户端的状态从“活动”更新为“隐藏”。这将是用户选择隐藏或删除对象的附加选项。

型号:

class Client(models.Model):
    name = models.CharField(max_length=256)
    status = models.CharField(max_length=25, default='active')

查看:

def Client_List(request):
    clients = Client.objects.filter(status='active')
    context = {'clients':clients}
    return render(request, 'sales/client_list.html', context)

class ClientDelete(DeleteView):
    success_url = reverse_lazy('list_clients')
    model = Client

    def get(self, *a, **kw):
        return self.delete(*a, **kw)

html:

<a class="btn" href="{% url 'delete_client' client.id %}">
<a class="btn" href="{% url 'hide_client' client.id %}">

【问题讨论】:

标签: django django-models django-views django-forms django-templates


【解决方案1】:

您不应使用 GET 请求来创建、更新或删除实体。这违反了HTTP protocol specifications:

特别是,已经确立了GET 和HEAD 方法不应具有采取除检索之外的操作的意义的约定。这些方法应该被认为是“安全的”。

您可以制作一个发出 POST 请求的小表单,其中:

<form method="post" action="{% url 'delete_client' client.id %}">
    {% csrf_token %}
    <button type="submit">delete</button>
</form>

至于隐藏对象,您可以制作一个简单的视图,如下所示:

from django.shortcuts import redirect

def hide_client(request, pk):
    Client.objects.filter(pk=pk).update(status='active')
    return redirect(Client_list)

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2015-09-04
    • 2017-12-18
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    相关资源
    最近更新 更多