Django пытается сохранить значение в базе данных, но значение становится NULL, когда я пытаюсь сохранить - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь запустить команду, используя подпроцесс, который работает нормально, а затем он должен выплевывать значение с помощью функции печати, которая также отлично работает.

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 голосов
/ 25 октября 2018

Проблема в том, что print(..) сам не возвращает переданное значение, он печатает что-то и возвращает None, если вы хотите преобразовать cmd вstr ing, вы можете использовать конструктор str(..) или можете - учитывая, что cmd является строковым объектом, просто используйте cmd.

Далее ваш user является CharField, а не ForeignKey в User объект, поэтому вам придется преобразовать его в строку, но это не рекомендуется.Я настоятельно рекомендую рассмотреть возможность превращения этого в ForeignKey, так как, если вы, например, позже измените имя пользователя User, то username, который вы храните в модели UserTasks, будет ссылаться на несуществующего пользователя..

Таким образом, вы можете создать (и сохранить одновременно) объект Usertasks с помощью:

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

Но, как уже было сказано, хранить имя пользователяuser.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...