Django模型未保存到数据库

0 投票
1 回答
1981 浏览
提问于 2025-04-18 05:46

好的,我正在和一个小团队一起做一个新项目,我们在用django开发一个网页应用。突然之间,我们发现无法再往数据库里添加模型对象了。大家都很困惑。下面是我们目前在调试的情况。

views.py

def postOp(request):
    if request.method == 'POST':
        operation = request.POST.get("operation","noop")

        #Registered user operations
        if request.user.is_authenticated():
            username = request.session.get("member","Guest")
            user = ToolUser.objects.get(name=username)
            zipcode = user.location
            .
            .
            #AddTool
            if operation == "addTool":
               toolName = request.POST.get("toolName","N/A")
               toolDesc = request.POST.get("toolDesc","N/A")
               print("In addtools")
               user.submitTool(toolName, toolDesc)
               print("SUBITTED")
               return HttpResponseRedirect("tools")

模型

def submitTool(self, Nname, Ndescription):
        print("IN SUBMIT ")
        t = Tool(name=Nname, owner=self.id, shed=self.id, description=Ndescription, currOwner=0, location=self.location)
    print("tool made :", t.name, ", ", t.owner, ", ", t.shed, ", ", t.description, \
                      ", ",t.currOwner ,", ", t.location)
    t.save()
    print("saving tool")

看起来代码执行到 t.save() 的时候就出问题了。用另外一个工具查看数据库时,明显发现数据没有保存到表里。但是在终端输出的信息里,似乎是创建了这个实例。

终端输出:

在 addtools

在提交中

创建的工具:tooltest , 2 , 2 , 描述 , 0 , 12345

补充:我忘了更新这个,找到了问题,原来是有一个字段是空的,django 不允许保存有空字段的数据。

1 个回答

-1

等一下,你有一个叫做 saveTool() 的模型函数,但你却在调用 user.savetool(我猜这是指 django.contrib.auth.user)?如果你说这样可以解决问题,那就没问题。

其实更好的做法是直接在 postOp() 函数里填充对象,然后在那儿保存。如果 saveTool() 确实是模型类的一部分,你应该先创建一个模型对象,然后再调用一个方法来执行另一个功能。

我的意思是,从代码风格来看,这段代码显得有些复杂,或者说需要更多的信息才能搞清楚到底发生了什么。

撰写回答