Django报错:book()收到意外关键字参数'name',求解决方案
报错:
book() got an unexpected keyword argument 'name' 原因及解决方法 问题原因
你在views.py里定义了名为book的视图函数,同时在models.py里又定义了同名的Model类book。当你在视图函数内部执行book(name=name,...)时,Python会优先调用当前作用域内的视图函数book——但这个视图函数只接受request这一个参数,你传入了name等关键字参数,直接触发了参数不匹配的错误。另外还有个小问题:你获取children参数时拼写错成了childern,后续会引发KeyError。
解决方法
1. 重命名Model类(推荐,符合PEP8规范)
Python类名遵循大驼峰命名法,把models.py里的book类改成Book,再在视图里导入使用新类名:
修改后的models.py:
# Create your models here. class Book(models.Model): name=models.CharField(max_length=100) email=models.EmailField(max_length=100) password=models.CharField(max_length=100) type=models.CharField(max_length=100) ticket_to=models.CharField(max_length=100) ticket_from=models.CharField(max_length=100) dept_date=models.DateField() ret_date=models.DateField() adults=models.IntegerField() children=models.IntegerField()
修改后的views.py:
from django.http import HttpResponse from django.shortcuts import render from .models import Book def book(request): if request.method=='POST': name=request.POST['name'] email=request.POST['email'] password=request.POST['password'] type=request.POST['r'] ticket_from=request.POST['ticket_from'] ticket_to=request.POST["ticket_to"] dept_date=request.POST['dept_date'] ret_date=request.POST['ret_date'] adults=request.POST['adults'] children=request.POST['children'] # 修正拼写错误 tck=Book(name=name,email=email,password=password,type=type,ticket_from=ticket_from,ticket_to=ticket_to,dept_date=dept_date,ret_date=ret_date,adults=adults,children=children) tck.save() return HttpResponse("Booked") else: return render(request,"book.html")
2. 给Model类取别名(不修改类名的方案)
如果不想改Model类名,在导入时给它加个别名,避免和视图函数冲突:
# 在views.py顶部导入时 from .models import book as BookModel
然后创建实例时用BookModel(...)替代原来的book(...),同时记得修正children的拼写错误。
内容的提问来源于stack exchange,提问作者dhruv
相关产品推荐
相关产品推荐

