首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从django模型创建mptt

从django模型创建mptt
EN

Stack Overflow用户
提问于 2014-04-09 15:40:58
回答 1查看 339关注 0票数 0

我有一个django模型,如下所示:(它同时具有mptt和正则模型)

代码语言:javascript
复制
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class deg_course_cat(models.Model):
    degree_code = models.CharField(max_length=24)
    specialization = models.CharField(max_length=48)
    category_level1 = models.CharField(max_length=48)
    category_level2 = models.CharField(max_length=96)
    category_level3 = models.CharField(max_length=48)
    min_credit = models.IntegerField()
    max_credit = models.IntegerField()
    primarystuff = models.CharField(max_length=24)

class deg_course_cat_mptt(MPTTModel):
    name = models.CharField(max_length=100, unique=False)
    min_credit = models.IntegerField(null=True)
    max_credit = models.IntegerField(null=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

# Create your models here.

我编写了python代码来获取django模型的所有数据,并从其中自动创建mptt模型。python代码如下所示:

代码语言:javascript
复制
from studentapp.models import deg_course_cat, deg_course_cat_mptt

degreeroot = deg_course_cat_mptt.objects.create(name="DegreeRoot")

for degrees in deg_course_cat.objects.values_list('degree_code', flat=True):
    degreearray = list(set(deg_course_cat.objects.values_list('degree_code', flat=True)))
    for i in range(0,len(degreearray)):
    degree = []
        degree.append(deg_course_cat_mptt.objects.create(name= degreearray[i], parent=degreeroot))

        for categories_l1 in deg_course_cat.objects.values_list('category_level1', flat=True):
        category_l1_array = list(set(deg_course_cat.objects.filter(degree_code=degree[i]).values_list('category_level1', flat=True)))
        for j in range(0,len(category_l1_array)):
        categorylevel1 = []
            categorylevel1.append(deg_course_cat_mptt.objects.create(name= category_l1_array[j], parent=degree[i]))

我得到了以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/base.py", line 415, in handle
    return self.handle_noargs(**options)
  File "/home/abhishek/projects/studentmptt/local/lib/python2.7/site-packages/django/core/management/commands/shell.py", line 83, in handle_noargs
    import code
  File "/home/abhishek/projects/studentmptt/studentsite/code.py", line 12, in <module>
    category_l1_array = list(set(deg_course_cat.objects.filter(degree_code=degree[i]).values_list('category_level1', flat=True)))
IndexError: list index out of range
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 16:26:33

在错误声明中

代码语言:javascript
复制
category_l1_array = list(set(deg_course_cat.objects.filter(degree_code=degree[i]).values_list('category_level1', flat=True)))

很明显,变量度在索引i中没有任何值,这就是它给出索引错误:列表索引超出范围的原因。

可以在错误行之前使用导入pdb;pdb.set_trace()语句来调试问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22967549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档