Django主键和数据插入问题

时间:2018-01-27 20:11:05

标签: python mysql django

我的控制台在尝试将数据推送到我的数据库时显示此问题

invalid literal for int() with base 10:

我的 views.py 类:

def routineInput(request):
if request.method == 'POST':
    form = CreateRoutine(request.POST)
    query = request.POST["name_of_routine"]
    newEntry = Todolist(str(query))
    #newEntry.name = ()
    if form.is_valid():
        newEntry.save()
        return HttpResponseRedirect('/todo/saved/')
else:
    form = CreateRoutine()

这是我的 models.py 类:

class Todolist(models.Model):
id = models.AutoField(primary_key=True)
name =  models.TextField()
created_at = models.DateTimeField(default = datetime.now, blank = True)
updated_at = models.DateTimeField(default = datetime.now, blank = True)

newEntry = Todolist(str(query))是我的问题。如果我将其更改为newEntry = Todolist(1, str(query))我的代码有效。但在最后一种情况下,我的代码将整数推送到" id"虽然它应该是我的自动增量主键。

在我的函数中没有整数时,我的浏览器会抛出这条消息:

  

基数为10的int()的无效文字:...

1 个答案:

答案 0 :(得分:0)

您可以自己执行newEntry = ToDoList(name=str(query))或自定义模型中的create方法来自定义实例创建。

from django.db import models

class ToDoList(models.Model):
    id = models.AutoField(primary_key=True)
    name =  models.TextField()

    created_at = models.DateTimeField(default = datetime.now, blank = True)
    updated_at = models.DateTimeField(default = datetime.now, blank = True)

    @classmethod
    def create(cls, name, created_at=None, updated_at=None):
        list = cls(name=name, created_at=created_at, updated_at=updated_at)
        # do something with the insatnce
        return list

newEntry = ToDoList.create(name=str(query))

如果没有关键字参数name=,构造函数需要id的整数(因为它是第一个位置参数),而你传递一个字符串。