Python Django TypeError在尝试保存模型时出错

Python Django TypeError在尝试保存模型时出错,python,django,typeerror,Python,Django,Typeerror,我试图创建一个todo添加,但当我试图保存我的模型时,它说todo得到了一个意外的关键字参数 TypeError at / todo() got an unexpected keyword argument 'user' 它抛出以下错误 我的模特 class todo(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=

我试图创建一个todo添加,但当我试图保存我的模型时,它说todo得到了一个意外的关键字参数

TypeError at /
todo() got an unexpected keyword argument 'user'
它抛出以下错误

我的模特

class todo(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE)
   title = models.CharField(max_length=100)
   description = models.TextField()
   date= models.DateTimeField(auto_now = True)
   is_completed = models.BooleanField(default=False)


   def __str__(self):
      return self.user.username + self.title
我的观点是这样的

def todo(request):
  if request.method == "POST":
    title = request.POST.get('title')
    description = request.POST.get('description')
    todo_list = todo(user=request.user, title=title, description= description)
    todo_list.save()
    messages.success(request, 'Successfully Created')
return render(request, 'main/todo.html')

请帮助我解决问题

您的模型和视图都命名为
todo
,因此如果您在该视图中调用
todo
,函数将覆盖该模型,从而进行递归调用

您可以使用不同的名称导入
todo
,如:

from app_name.models import todo as todo_model

def todo(request):
  if request.method == 'POST':
    title = request.POST.get('title')
    description = request.POST.get('description')
    todo_list = todo_model.objects.create(
        user=request.user,
        title=title,
        description= description
    )
    messages.success(request, 'Successfully Created')
return render(request, 'main/todo.html')
然后您可以使用:

from app_name.models import Todo

def todo(request):
  if request.method == 'POST':
    title = request.POST.get('title')
    description = request.POST.get('description')
    todo_list = Todo.objects.create(
        user=request.user,
        title=title,
        description= description
    )
    messages.success(request, 'Successfully Created')
return render(request, 'main/todo.html')
从app_name.models导入Todo
def todo(请求):
如果request.method==“POST”:
title=request.POST.get('title')
description=request.POST.get('description')
todo_list=todo.objects.create(
user=request.user,
头衔,
描述=描述
)
messages.success(请求“已成功创建”)
返回渲染(请求'main/todo.html')

注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


注意:您可以将视图限制为具有


注意:最好使用 而不是手动验证和清理数据。
表单
将不会 这不仅简化了在HTML中呈现表单,而且还使其更加方便 验证输入,并将数据清理为更方便的类型

您的模型和视图都被命名为
todo
,也就是说,您只是在递归地调用您的视图。。。
from app_name.models import Todo

def todo(request):
  if request.method == 'POST':
    title = request.POST.get('title')
    description = request.POST.get('description')
    todo_list = Todo.objects.create(
        user=request.user,
        title=title,
        description= description
    )
    messages.success(request, 'Successfully Created')
return render(request, 'main/todo.html')