Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Post方法未更新数据库Django_Python_Django_Forms_Post - Fatal编程技术网

Python Post方法未更新数据库Django

Python Post方法未更新数据库Django,python,django,forms,post,Python,Django,Forms,Post,Post方法未更新数据库 大家好!我是Django和python的新手,我真的需要你的帮助。 我需要修改Anomalie类实例的一个属性(状态)。我用表格来做这件事。问题是当我“提交”更新它时,我的数据库中没有任何内容。我遵循一步一步的教程,但在我的情况下是不工作的 这是我的模型课: class Anomalie (models.Model): ANOMALIE = ( ("Etiquette absente", "Etiquette abs

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%}

特雷特异常{{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从网页提交补丁请求。非常感谢!!!:这正是我所缺少的!关于创建一个单独的视图来更新对象,你的确切意思是什么?你有没有一个例子,我很想学习。非常感谢!