如何手动关联两个模型?从excel电子表格中提取数据

时间:2015-02-15 07:38:59

标签: django django-forms foreign-keys django-views

我尝试创建一个网络表单,用户输入一些信息并上传excel电子表格。在帖子期间(在我的views.py中)我试图打开文件并将该文件中的信息保存到我的模型中。

另一件事是有两个相关联的模型。任何人都知道views.py可能看起来如何或是否可能?

models.py

class service_order(models.Model):
    r_name = models.CharField("Requestor Name", max_length=25)
    r_email = models.CharField("Requestor Email Contact", max_length=25)

class specifications(models.Model):
    service_order = models.ForeignKey(service_order)
    controller_type = models.CharField("Controller", max_length=25)
    hostname = models.CharField("Hostname", max_length=25) 

excel文件非常简单:

"controller", "hostname", "domain", "ip_address"... etc
"hp server", "sample hostname", "google.com "1.2.3.4"... etc
"hp server", "sample hostname", "google.com "1.2.3.4"... etc
"hp server", "sample hostname", "google.com "1.2.3.4"... etc

我计划将xlrd合并到我的django表单和视图中..这是我正在阅读excel电子表格的一些初步代码:

import xlrd 

datafile = "sample_survey.xlsx"

def parse_file(datafile):
    workbook = xlrd.open_workbook(datafile)
    sheet = workbook.sheet_by_index(0)

    START_ROW = 35
    END_ROW   = 60

    myList = []

    for row in range(START_ROW,END_ROW):

        values = (sheet.row_values(row, start_colx=1, end_colx=20))

        headers = ["controller", "hostname", "domain", "ip_address", "netmask", "gateway", "dns1", "dns2", "ntp1", "ntp2", 
                   "order_name", "order_phone", "order_email", 
                   "shipping_adress", "shipping_city", "shipping_region", "shipping_region_code", "shipping_country", "shipping_diff"]

        dictionary = dict(zip(headers, values))

        myList.append(dictionary)

    for row in myList:
        print row

data = parse_file(datafile)

1 个答案:

答案 0 :(得分:2)

如果每一行代表不同的顺序,则代码将如下所示:

for row in myList:
    order = service_order.objects.create(r_name=row['order_name'],
                                         r_email=row['order_email'])
    specifications.objects.create(service_order=order,
                                  controller_type=row['controller'],
                                  hostname=row['hostname'])

另请注意,在parse_file()中,您必须接受文件内容而不是文件名:

def parse_file(file_contents):
    workbook = xlrd.open_workbook(file_contents=file_contents)
    ...

def my_view(request):
    data_file = request.FILES['data_file']
    parse_file(data_file.read())
    ...