【问题标题】:Django trying to save value to database but value turns into NULL when i'm trying to saveDjango试图将值保存到数据库,但是当我尝试保存时值变成NULL
【发布时间】:2019-03-30 01:59:44
【问题描述】:

我正在尝试使用运行良好的子进程运行命令,然后它应该使用打印功能吐出值,这也可以完美运行。

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

我该如何解决这个问题?

【问题讨论】:

  • 但是print(..) 确实返回任何东西,它确实返回None
  • 好吧,这是我不知道的新手错误。你知道我可以通过其他方式实现这一目标吗?
  • 补充@WillemVanOnsem 所说的内容:test = cmd 会如您所愿。如果您需要调试信息,您仍然可以在另一行中执行 print(cmd)
  • 您的回答实际上让我自己找到了它。我可以将 cmd 函数传递给 TaskID= 字段。非常感谢!
  • @schwobaseggl 这确实是正确的!非常感谢你们俩! :D

标签: python django subprocess


【解决方案1】:

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

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

因此,您可以构造(并同时保存)Usertasks 对象:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 2017-12-01
    • 2021-01-26
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多