如何从bash脚本运行django shell命令

时间:2013-02-28 16:05:58

标签: django bash django-shell

我没有重复删除我的表,重新创建它们并在我的开发环境中填充数据,而是决定创建一个名为reset_db的bash脚本来为我执行此操作。我得到它来敲打桌子,重新创建它们。但它无法使用django orm中的数据填充表格。

我尝试通过从脚本调用django shell然后运行ORM命令来填充我的表来执行此操作。但似乎django shell命令没有运行。

我尝试在shell中手动/直接运行django orm命令,它们运行正常,但不是来自bash脚本。

我得到的错误是:

NameError: name 'User' is not defined

NameError: name 'u1' is not defined

NameError: name 'm' is not defined

这是我的剧本:

#!/bin/bash
set +e

RUN_ON_MYDB="psql -X -U user --set ON_ERROR_STOP=on --set AUTOCOMMIT=off rcamp1"

$RUN_ON_MYDB <<SQL  # Whack tables
DROP TABLE rcamp_merchant CASCADE;
DROP TABLE rcamp_customer CASCADE;
DROP TABLE rcamp_point CASCADE;
DROP TABLE rcamp_order CASCADE;
DROP TABLE rcamp_custmetric CASCADE;
DROP TABLE rcamp_ordermetric CASCADE;
commit;
SQL

python manage.py syncdb   # Recreate tables

python manage.py shell <<ORM   # Start django shell. Problem starts here.
from rcamp.models import Customer, Merchant, Order, Point, CustMetric, OrderMetric
u1 = User.objects.filter(pk=5)
m = Merchant(u1, full_name="Bill Gates")
m
ORM

我是django和shell脚本的新手。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您应该考虑创建一个夹具来填充您的数据库https://docs.djangoproject.com/en/dev/howto/initial-data/

答案 1 :(得分:2)

您需要明确导入用户。 django包和其他一些内容会自动导入,但不是您想要的所有内容。

另外,为避免不知道要导入的内容,有management commands。这将利用您的Django和Python。您可以稍后学习shell脚本。

答案 2 :(得分:1)

在你的错误中清楚地看到不被认为是模型类用户django-admin可能你缺少一些导入或类似的东西

  from django.db import models
  User import from django.contrib.auth.models

,顺便说一句

  User.objects.filter u1 = (pk = 5)

我想我放

  u1 = User.objects.filter (pk = 5). First ()

最后。 无论如何,在这里我留下一些可能有帮助的线程, https://docs.djangoproject.com/en/dev/ref/django-admin/ http://www.stackoverflow.com/questions/6197256/django-user-model-fields-at-adminmodel https://groups.google.com/forum/?fromgroups =#!话题/ Django的用户/ WrVp1DDFrX8 希望这会有所帮助。