2013-02-28 137 views
0

我決定創建一個名爲reset_db的bash腳本,而不是重複刪除我的表,重新創建它們並填充我的dev en中的數據。我得到它來摧毀桌子,重新創建它們。但是它無法使用django orm的數據填充表格。我怎樣才能從bash腳本運行django shell命令

我嘗試通過從腳本調用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和外殼腳本。謝謝你的幫助。

回答

1

清楚地看到你的錯誤不能被識別爲一個模型類用戶的Django管理員也許你缺乏一些進口或類似這樣的

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 希望這會有所幫助。

2

您需要明確導入用戶。 django包和其他一些東西會自動導入,但不是您想要的任何東西。

此外,爲了避免不知道要導入什麼,有management commands。這將利用你的Django和Python。您可以稍後學習shell腳本。

+0

+1用於參考管理命令。 – user1339036 2013-03-01 03:23:49