【问题标题】:Importing data from scanned text into Django as YAML fixture or SQL将扫描文本中的数据作为 YAML 夹具或 SQL 导入 Django
【发布时间】:2011-10-06 01:39:16
【问题描述】:

我正在设置一个简单的 Django 应用程序——一个测验。问题和答案来自经过扫描、OCR 和解析的打印样本测试。我已经将它们解析为 Python 对象,如下所示:

class Quiz(object):
    def __init__(self, name):
        self.name = name
        self.questions = {}
class Question(object):
    def __init__(self, text):
        self.text = text
        self.answers = {}
class Answer(object):
    def __init__(self, text, value= -1.0, explanation=""):
        self.text = text
        self.value = value
        self.explanation = explanation

但是我的 Django 模型,由于模型字段无法拥有“列表”,因此使用外键来保持测验之间的关系-

class Quiz(models.Model):
    name = models.CharField(max_length=256)
class Question(models.Model):
    quiz = models.ForeignKey(quiz)
    order = models.IntegerField()
    text = models.TextField()
class Answer(models.Model):
    question = models.ForeignKey(question)
    order = models.IntegerField()
    text = models.TextField()
    explanation = models.TextField()
    value = models.FloatField()

有人可以建议一种从前者到后者的直接方法吗?谢谢。

【问题讨论】:

  • 谢谢。我试图在解析源文本时直接创建一个 Question 模型实例。问题是当我尝试导入我的模型时,from models import Choice, Question 我收到以下错误:File "...quiz/printparser.py", line 22, in <module> from models import Choice, Question File "...quiz/models.py", line 6, in <module> class Question(models.Model): File "...django/db/models/base.py", line 52, in __new__ kwargs = {"app_label": model_module.__name__.split('.')[-2]} IndexError: list index out of range Django 是否有超出正常 Python 导入的限制?

标签: python django fixture


【解决方案1】:

要问自己的第一个问题是,为什么要使用这些中间类?这听起来像是糟糕的设计。

一旦我们摆脱了糟糕的设计。您的代码显示 qustion.answers 是字典而不是列表,我假设您只是打错了字。

如果您有一个测验模型实例,您可以致电Quiz.question_set.all() 以获取该测验的所有问题。此调用的结果将是一个查询集,它是一个可迭代对象,因此调用 list(Quiz.question_set.all()) 将为您提供一个列表。

虽然您做错了,但我不能再强调了,而且很可能只是取消了中间人。此外,PEP8 命名规则也是一个好主意,即类的命名如下:

class Quiz(models.Model):
    ...

遵循惯例会让你的生活更轻松 =)

【讨论】:

  • 首先,是的,“列表”是一个错字。我指的是 Django 中缺少集合字段类型、列表、字典、集合等。其次,您对命名约定是正确的。感谢您提醒您关注 PEP。最后,我使用了 bad design,因为我无法确定如何将 OCR 文本直接导入 Django。似乎我不清楚我需要将大量数据输入 Django 的数据库,而不是输出——我可以管理。
  • 向我展示您在答案字典中存储的内容的示例,我可以向您展示如何将其映射到您的模型。我希望一个测验有多个问题,所以我希望它可以用一个列表或一个字典列表来表示,而不是直接用一个字典来表示。虽然我应该注意,如果这是大量数据并且你会经常这样做,你会想要找到一种非常不同的方式来做这件事,但是通过 django 的 ORM 批量导入数据很慢而且非常痛苦
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2011-03-16
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多