Django尝试将值保存到数据库,但当我尝试保存时值变成NULL

时间:2018-10-25 12:42:32

标签: python django subprocess

我正在尝试使用运行良好的子进程来运行命令,然后应该使用打印功能将其吐出,这也可以很好地工作。

cmd = subprocess.check_output(["golemcli", "tasks", 'create',unique_filename]).decode(sys.stdout.encoding)
test = print(cmd) 

这将打印类似“ cc490086-d851-11e8-9ca6-a6389e8e7978”的字

现在,我要将其保存到数据库中。我创建了一个

的模型
class Usertasks(models.Model):
    TaskID = models.CharField(max_length=40)
    user = models.CharField(max_length=30)

这就是我的视图保存数据的方式。

r = Usertasks(user=request.user, TaskID=test,)
r.save()

但是当我尝试保存打印数据时,它变成了NULL值吗?我的Django抱怨以下异常值:

NOT NULL constraint failed: myproject_usertasks.TaskID

我该如何解决?

1 个答案:

答案 0 :(得分:2)

问题是print(..)本身不会返回所传递的值,它会打印某些内容,并返回None(如果要执行以下操作)将cmd转换为str,可以使用str(..)构造函数,也可以-给定cmd是一个类似字符串的对象,只需使用{{1} }。

接下来,您的cmduser,而不是CharFieldForeignKey对象,因此您必须将其转换为字符串,但这是<不建议使用。我强烈建议您考虑将其转换为User,因为例如,如果您以后更改了ForeignKey的用户名,那么您存储在User模型中的username,将指向不存在的用户。

因此,您可以使用以下方法构造(并同时保存)UserTasks对象:

Usertasks

但是如上所述,存储r = Usertasks.object.create(user=request.user.username, TaskID=cmd)的用户名不是一个好主意。