[英]Python - Django - Model BooleanField Dependent On Other BooleanField In Same Model
[英]Python Django - update booleanField via List View
有什么方法可以更新列表視圖中的 booleanField 嗎? 在列表視圖中,我列出了所有訂單,我需要標記哪些已完成,哪些未完成。 我知道我可以通過 UpdateView 更新它,但這對用戶不友好,因為我必須離開列表視圖頁面。
模型.py
class Order(models.Model):
...
order = models.CharField(max_length = 255)
completed = models.BooleanField(blank=True, default=False)
視圖.py
class OrderIndex(generic.ListView):
template_name = "mypage.html"
context_object_name = "orders"
def get_queryset(self):
return Order.objects.all().order_by("-id")
我的頁面.html
{% extends "base.html" %}
{% block content %}
{% for order in orders%}
User: {{ order.user}} | Completed: {{order.completed}} <input
type="checkbox">
{% endfor %}
<input type="submit">
{% endblock %}
我對 django 框架很陌生,不知道如何使它工作。
像這樣應該看起來你 javascript
const updateField = (order_id) =>{
var form = new FormData();
form.append('order_id', order_id);
fetch('{% url "url_updateField" %}', {
method:'post',
body:form,
mode:'cors',
cache:'default',
credentials:'include',
}).then((response)=>{
console.log('field update as well')
})
})
只需在 envent onclick 上為您的按鈕添加一個功能
{% extends "base.html" %}
{% block content %}
{% for order in orders%}
User: {{ order.user}} | Completed: {{order.completed}} <input
type="checkbox" onclick="updateField({{order.pk}})">
{% endfor %}
<input type="submit">
{% endblock %}
那么在您看來,您應該擁有以下視圖來處理請求
def updateField(request):
print(request.body.get('order_id'))
#you should update you model field here
return JsonResponse({'ok':True}, status=200)
通過向 UpdateView 添加整個對象列表的額外上下文,將 UpdateView 與部分 listView 功能結合起來:
class OrderUpdateView(generic.UpdateView):
model = Order
form_class = OrderForm
....
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['orders'] = Order.objects.all().order_by("-id")
return context
考慮一個簡單的模板,其中整個列表顯示在頂部,底部有一個表單,允許用戶更新列表中的特定項目。 這種方法有目的地避免使用 Ajax 和 javascript。
有一種方法可以在沒有任何特殊魔法的情況下執行此操作,只需從您的列表視圖發布到更新視圖,並在隱藏表單字段中正確填寫整個表單,無需在其他任何地方執行任何特殊操作。
<!-- todo_list.html -->
<form method="POST" action="update/{{object.id}}/">
{% csrf_token %}
<input type="hidden" name="completed" value="true" />
<input type="hidden" name="name" value="{{object.name}}" />
<input type="hidden" name="due_date" value="{{object.due_date|date:'Y-m-d'}}" />
<input type="hidden" name="details" value="{{object.details}}" />
<button type="submit" class="btn btn-primary">Not Done</button>
</form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.