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

标签 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)

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

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

但是当我尝试保存打印数据时,它会变成 NULL 值?我的 Django 提示以下异常值:

NOT NULL constraint failed: myproject_usertasks.TaskID

我该如何解决这个问题?

最佳答案

问题是 print(..) 本身返回传递的值,它打印一些东西,然后返回,如果要将cmd转换为string,可以使用str(..)构造函数,或者你可以 - 给定 cmd 是一个类似字符串的对象,只需使用 cmd

接下来,您的 userCharField,而不是 User 对象的 ForeignKey,因此您将拥有将其转换为字符串,但这是可取的。我强烈建议考虑将其转换为 ForeignKey,因为如果您稍后更改 User 的用户名,那么您存储的 usernameUserTasks 模型中,将引用不存在的用户。

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

r = Usertasks.object.create(user=<b>request.user.username</b>, TaskID=cmd)

但如上所述,存储用户的用户名并不是一个好主意。

关于python - Django 尝试将值保存到数据库,但当我尝试保存时值变成 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52989564/

相关文章:

python - 在 Django 的过滤器查询中使用 lambda

python: subprocess.Popen() 行为

python - 澄清 Python For 循环中发生的情况

django - 如何使用带参数的嵌套模板标签?

python - 调试 Django 表单验证错误

Python 子进程无法读取 shell 中的所有输出

python - 如何使用子进程与 python 脚本交互

python - 如何使用 python-docx 应用删除线

python - 使用元素树打印 XML 标签属性

python - 如何以正确的方式对字典列表进行排序 Python