Python Post方法未更新数据库Django
Post方法未更新数据库 大家好!我是Django和python的新手,我真的需要你的帮助。 我需要修改Anomalie类实例的一个属性(状态)。我用表格来做这件事。问题是当我“提交”更新它时,我的数据库中没有任何内容。我遵循一步一步的教程,但在我的情况下是不工作的 这是我的模型课:Python Post方法未更新数据库Django,python,django,forms,post,Python,Django,Forms,Post,Post方法未更新数据库 大家好!我是Django和python的新手,我真的需要你的帮助。 我需要修改Anomalie类实例的一个属性(状态)。我用表格来做这件事。问题是当我“提交”更新它时,我的数据库中没有任何内容。我遵循一步一步的教程,但在我的情况下是不工作的 这是我的模型课: class Anomalie (models.Model): ANOMALIE = ( ("Etiquette absente", "Etiquette abs
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%}
特雷特异常{{anomalie_pk.id}}
{%csrf_令牌%}
{%endblock content%}
要保存对象,需要调用save
方法
def treter_anomalie(request, pk):
anomalie_pk = Anomalie.objects.get(id=pk)
if request.method == "POST":
anomalie_pk.state = 'traité'
anomalie_pk.save() # this will save the object
return redirect('/')
context = {'anomalie_pk': anomalie_pk}
return render(request, 'anomalie/treter_anomalie.html', context)
但是POST
不用于更新对象。可以创建单独的视图来更新对象
编辑
创建单独的视图
关闭检查后,我发现treter_anomalie
仅用于更新对象,即不用于新对象。如果是这种情况,则不需要创建单独的方法(视图)。只需将表单上的method
属性更改为PUT
,并将if语句更改为request.method==“PUT”
POST
用于创建
正如我提到的,
POST
用于创建操作而不是更新操作。但是在实践中,我看到很多次在不同的项目中使用POST
来创建和更新这两个目的。设置状态后,您不会调用anomalie\u pk.save()
。第二件事是,POST
应该用于创建新对象,而不是更新现有对象。对于更新,您应该使用PATCH
@MikołajRutecki这是从网页提交表单,而不是API请求,所以POST可以。据我所知,您需要使用JavaScript从网页提交补丁请求。非常感谢!!!:这正是我所缺少的!关于创建一个单独的视图来更新对象,你的确切意思是什么?你有没有一个例子,我很想学习。非常感谢!