【问题标题】:Multiple Error in view,edit a list of a model视图中出现多个错误,编辑模型列表
【发布时间】:2020-12-25 17:42:37
【问题描述】:

我正在尝试查看和编辑我的客户模型-

我正在做的是当您第一次打开服务器时,客户列表会作为链接打开。 就像我按下假设客户 1 一样。

一旦我进行更改并按下保存按钮,表格就会显示为预先填写好的,它给了我错误-

Page not found (404)
Request Method: POST
Request URL:    http://127.0.0.1:8000/marketing/editcustomer/2250a9b1-5d25-4bce-b426-e3a4abb45abb/POST

我也有返回按钮 - 按返回按钮后我也遇到同样的错误!

然后,如果我返回 customerlist(seecustomer) 并再次单击同一客户或任何其他客户,则会出现以下错误-

Manager isn't accessible via customer instances

有时它也会给 -

First argument to get_object_or_404() must be a Model, Manager, or QuerySet, not 'customer'.

我的models.py

class customer(models.Model):
    customerid=models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    customername=models.CharField(max_length=1000)

我的意见.py

def editcustomer(request,customer_pk):
    global customer
    customer=get_object_or_404(customer,pk=customer_pk,user=request.user)
    if request.method=='GET':
        form=createcustomerform(instance=customer)
        return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form})
    else:
        try:
            form=createcustomerform(request.POST,instance=customer)
            form.save()
            return redirect('seecustomer')
        except ValueError:
            return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form,'error':'Incorrect entry'})

我的html表单代码-

<form action="POST" method="POST">
{% csrf_token %}
<div id="customername"> <span><label for="customername">Company Name</label></span>
  <input type="text" id="customername" name="customername" placeholder="Enter Company's Full name" value="{{ customer.customername}}"> </div>
<button class="btn btn-primary btn-md" type="submit">Save</button>
<br>
<input type="button" class="btn btn-primary btn-md" value="Go Back" onclick="history.back(-1)" />
</form>

【问题讨论】:

  • 使用大写的类,所以Customer,这样它就不会与局部变量冲突。
  • 我试过了,但我现在无法更改更改/重命名
  • 那么问题是您的customer = get_object_or_404(customer, pk=...) 等会占用客户的价值。这最初是 customer 类,因为您导入了它,但在第二次运行中,它现在是 customer object...
  • 如何将型号名称customer重命名为Customer

标签: python html django django-models instance


【解决方案1】:

发生这种情况的原因是,在第一次调用get_object_or_404 之后,customer 是一个customer 对象,不再是类。

您可以导入模型,例如使用大写:

from app.models import customer as Customer

def editcustomer(request,customer_pk):
    customer=get_object_or_404(Customer,pk=customer_pk,user=request.user)
    if request.method=='GET':
        form=createcustomerform(instance=customer)
        return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form})
    else:
        try:
            form=createcustomerform(request.POST,instance=customer)
            form.save()
            return redirect('seecustomer')
        except ValueError:
            return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form,'error':'Incorrect entry'})

所以这里我们删除了global 部分,并使用别名Customer。话虽如此,我强烈建议使用PEP-8 style guidelines,因此将类的名称写在PerlCase,而不是snake_case。在这种情况下,您可以简单地使用以下命令导入它:

from app.models import Customer

def editcustomer(request,customer_pk):
    customer=get_object_or_404(Customer,pk=customer_pk,user=request.user)
    if request.method=='GET':
        form=createcustomerform(instance=customer)
        return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form})
    else:
        try:
            form=createcustomerform(request.POST,instance=customer)
            form.save()
            return redirect('seecustomer')
        except ValueError:
            return render(request,'marketing/editcustomer.html',{'customer':customer,'form':form,'error':'Incorrect entry'})

【讨论】:

  • 我尝试更改名称并再次运行 makemigrations,但出现以下错误 - ImportError: cannot import name 'customer' from 'marketing.models'
  • @ritu: 不,那你需要使用from app.models import Customer,所以删除customer as 部分。
  • @ritu:动作应该是空的,所以&lt;form action="" method="POST"&gt;。
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多