我正在尝试使用运行良好的子进程来运行命令,然后应该使用打印功能将其吐出,这也可以很好地工作。
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
我该如何解决?
答案 0 :(得分:2)
问题是print(..)
本身不会不返回所传递的值,它会打印某些内容,并返回None
(如果要执行以下操作)将cmd
转换为str
,可以使用str(..)
构造函数,也可以-给定cmd
是一个类似字符串的对象,只需使用{{1} }。
接下来,您的cmd
是user
,而不是CharField
到ForeignKey
对象,因此您必须将其转换为字符串,但这是<不建议使用。我强烈建议您考虑将其转换为User
,因为例如,如果您以后更改了ForeignKey
的用户名,那么您存储在User
模型中的username
,将指向不存在的用户。
因此,您可以使用以下方法构造(并同时保存)UserTasks
对象:
Usertasks
但是如上所述,存储r = Usertasks.object.create(user=request.user.username, TaskID=cmd)
的用户名不是一个好主意。