【发布时间】:2020-12-29 21:42:16
【问题描述】:
Post 方法没有更新数据库 大家好!我真的是 Django 和 python 的新手,我真的需要你的帮助,拜托。 我需要修改 Anomalie 类实例的一个属性(状态)。我正在使用表格来做到这一点。问题是当我“提交”更新它时,我的数据库中没有任何内容。我正在按照分步教程进行操作,但在我的情况下不起作用。
这是我的模型类:
class Anomalie (models.Model):
ANOMALIE = (
("Etiquette absente", "Etiquette absente"),
("Etiquette decalee", "Etiquette decalee"),
("Etiquette inconnue", "Etiquette inconnue"),
)
ANOMALIE_STATE = (
("traité", "traité"),
("mise à jour", "mise à jour"),
("signalé", "signalé"),
)
type = models.CharField(
max_length=200, choices=ANOMALIE, null=False)
date_report = models.DateTimeField(null=False, blank=False)
localization = models.TextField(max_length=30, null=False, blank=False)
state = models.CharField(
max_length=200, choices=ANOMALIE_STATE, null=False)
aisle = models.ForeignKey(Aisle, null=True, on_delete=models.SET_NULL)
product = models.ForeignKey(
Product, null=True, on_delete=models.SET_NULL)
def datepublished(self):
return self.date_report.strftime('%B %d %Y')
def __str__(self):
return self.type
这是view.py
def treter_anomalie(request, pk):
anomalie_pk = Anomalie.objects.get(id=pk)
if request.method == "POST":
anomalie_pk.state = 'traité'
return redirect('/')
context = {'anomalie_pk': anomalie_pk}
return render(request, 'anomalie/treter_anomalie.html', context)
这是 treter_anomalie.html
{% extends 'base.html'%}
{% load static %}
{%block content%}
<div id="layoutSidenav">
<div id="layoutSidenav_content">
<main>
<div class="container-fluid">
<P>treter anomalie {{ anomalie_pk.id }}</P>
<form action="{% url 'treter_anomalie' anomalie_pk.id %}" method="POST">{% csrf_token %}
<a href="{% url 'fix_anomalie_stock' anomalie_pk.id anomalie_pk.type %}"> cancel</a>
<input type="submit" name="confirm">
</form>
</div>
</main>
</div>
</div>
{%endblock content%}
这是 urls.py
from anomalie.views import(
consult_anomalie,
fix_anomalie_stock,
update_location_view,
treter_anomalie,
)
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_screen_view, name="home"),
path('consult/<str:pk>/', consult_anomalie, name="consult_anomalie"),
path('fix_anomalie_stock/<str:pk>/<str:type_anomalie>',
fix_anomalie_stock, name="fix_anomalie_stock"),
]
所以当我运行代码时,它会返回主页(我有异常列表),当我查阅特定异常时,我看不到任何变化。
另外,你尝试了anomalie_pk.delete,因为可能选择不同,但它没有被删除。
我没有在 cmd 中看到错误。我真的不知道发生了什么,所以非常感谢您的帮助
【问题讨论】:
-
设置状态后不要调用
anomalie_pk.save()。第二件事是,POST应该用于创建新对象,而不是更新现有对象。对于更新,您应该使用PATCH -
@MikołajRutecki 这是从网页提交表单,而不是 API 请求,所以 POST 很好。据我所知,您需要使用 JavaScript 从网页提交 PATCH 请求。