【发布时间】:2010-12-25 08:16:40
【问题描述】:
这是我的models.py
from django.db import models
class School(models.Model):
school = models.CharField(max_length=300)
def __unicode__(self):
return self.school
class Lawyer(models.Model):
firm_url = models.URLField('Bio', max_length=200)
firm_name = models.CharField('Firm', max_length=100)
first = models.CharField('First Name', max_length=50)
last = models.CharField('Last Name', max_length=50)
year_graduated = models.IntegerField('Year graduated')
school = models.CharField(max_length=300)
school = models.ForeignKey(School)
class Meta:
ordering = ('?',)
def __unicode__(self):
return self.first
以及来自 csv 文件的 2 个示例行:
"http://www.graychase.com/aabbas,Gray & Chase LLP, Amr A ,Abbas,The George Washington University Law School, 2005"
"http://www.graychase.com/kadam,Gray & Chase LLP, Karin ,Adam,Ernst Moritz Arndt University Greifswald, 2004"
谢谢。
编辑
您能否提供有关此脚本的更详细信息?一些问题:
我的应用在
C:.../Documents/PROJECTS/Django/sw2/wkw2.
这条路径已经在 PYTHONPATH 中,我还需要这条线吗?如果是这样,我要这样输入吗?
sys.path.append('C:\\sw2')
os.environ 是做什么的?我试图阅读文档,但我不明白。
os.environ['DJANGO_SETTINGS_MODULE'] = 'sw2.settings'
from django.core.management import setup_environ
from sw2 import settings
from sw2.wkw2.models import *
import csv
dataReader = csv.reader(open('csvtest1.csv'), delimiter=',', quotechar='"')
for row in dataReader:
lawyer=Lawyer()
lawyer.firm_url=row[0]
lawyer.firm_name=row[1]
lawyer.first=row[2]
lawyer.last=row[3]
lawyer.school=row[4]
lawyer.year_graduated=row[5]
lawyer.save()
谢谢!
根据 celopes 的回答进行编辑:
塞洛普斯:
我看到你的回答有点晚了。我一直在尝试使用
更新 shell 中的数据库>>> p1 = Lawyer(school = "The George Washington University Law School", last = "Babbas", firm_url = "http://www.graychase.com/babbas", year_graduated = 2005, firm_name= "Gray & Chase", first= "Amr A")
但我不断收到整数错误。最后,我意识到学校需要是school_id,也就是形式上,
>>> p1 = Lawyer(school_id = 1, last = "Babbas", firm_url = "http://www.graychase.com/babbas", year_graduated = 2005, firm_name= "Gray & Chase", first= "Amr A")
由此我意识到,我需要知道每所学校的学校 ID 才能更新 Lawyer 表。由于这是不可能的,我决定删除ForeignKey,因为我不知道如何解决这个问题。 (我是 Python 和 Django 的新手。)
今天早上我看到了你的回答。现在我在开发服务器中更改了我的模型,我只有一张表:Lawyer。我想这就是我将要使用的。再次抱歉没有早点看到您的回答。
2009 年 12 月 14 日编辑:
塞洛普斯:
再次感谢这个脚本。它解决了我的问题。在保存到数据库之前,我不需要将 csv 转换为 json 或其他格式,这很好。我做了一些改变。首先,如前所述,我将模型更改为只是 Lawyer。此外,您使用“名称”修复了重复的学校。但是我在admin.py 中有list_display、list_filter 和search_fields,并且更改字段名称会导致太多错误。
class LawyerAdmin(admin.ModelAdmin):
fieldsets = [
('Name', {'fields': ['last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated']}),
#('School', {'fields': ['school', 'year_graduated']}),
]
list_display = ('last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated')
list_filter = ['school', 'year_graduated']
search_fields = ['last', 'school', 'firm_name']
#search_fields = ['school__school']
#search_fields = ['school__lawyer__last']
使用新的models.py,简化的脚本运行良好。这就是我正在使用的:
csv_filepathname="C:/Users/A/Documents/Projects/Django/sw2/wkw2/fixtures/data1.csv"
your_djangoproject_home="C:/Users/A/Documents/PROJECTS/Django/"
import sys,os
sys.path.append(your_djangoproject_home)
os.environ['DJANGO_SETTINGS_MODULE'] ='sw2.settings'
from sw2.wkw2.models import Lawyer
import csv
dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"')
for row in dataReader:
lawyer=Lawyer()
lawyer.firm_url=row[0]
lawyer.firm_name=row[1]
lawyer.first=row[2]
lawyer.last=row[3]
lawyer.school=row[4]
lawyer.year_graduated=row[5]
lawyer.save()
我还删除了每一行的引号。我注意到如果我把年份放在引号中,我会得到整数错误,没有引号可以正常工作。你是如何让它与引号一起工作的?
再次感谢,这很有帮助。现在我必须让它在生产服务器中工作。
【问题讨论】:
-
试试我的django-data-import 工具。