Импортирование данных из отсканированного текста в Django как YAML или SQL - PullRequest
1 голос
/ 06 октября 2011

Я настраиваю простое приложение Django - викторину.Вопросы и ответы приходят из распечатанных тестовых образцов, которые были отсканированы, распознаны и проанализированы.Я проанализировал их в объекты 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()
* 1005Может ли кто-нибудь предложить прямой путь от первого к последнему?Спасибо.

1 Ответ

0 голосов
/ 06 октября 2011

Первый вопрос, который вы должны себе задать, это почему вы вообще используете эти промежуточные классы? Это звучит как плохой дизайн.

Как только мы пройдем мимо плохого дизайна. Ваш код показывает, что quration.answers - это словарь, а не список, я полагаю, вы только что сделали опечатку.

Если у вас есть экземпляр модели Quiz, вы можете позвонить Quiz.question_set.all(), чтобы получить все вопросы для этого теста. Результатом этого вызова будет набор запросов, который является итеративным объектом, и поэтому вызов list(Quiz.question_set.all()) даст вам список.

Я не могу особо подчеркнуть, что вы делаете это неправильно и, скорее всего, просто покончили с посредником. Также очень хорошо следовать правилам именования PEP8, т.е. классы названы так:

class Quiz(models.Model):
    ...

Это сделает вашу жизнь проще следовать конвенциям =)

...