1

簡単な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()

誰かが前者から後者に行く簡単な方法を提案できますか?ありがとう。

4

1 に答える 1

0

自分自身に問う最初の質問は、なぜこれらの中間クラスを使用しているのかということです。これは悪いデザインのように聞こえます。

悪いデザインを通り過ぎたら。あなたのコードは、qustion.answersがリストではなく辞書であることを示しています。タイプミスをしただけだと思います。

クイズモデルインスタンスがある場合は、Quiz.question_set.all()そのクイズのすべての質問を取得するために呼び出すことができます。この呼び出しの結果は、反復可能なオブジェクトであるクエリセットになります。そのため、この呼び出しはlist(Quiz.question_set.all())リストを提供します。

あなたがそれを間違ってやっていると私は十分に強調することはできません、そしておそらくただ仲買人をやめるべきです。また、PEP8の命名規則に従うことは非常に良い考えです。つまり、クラスは次のように命名されます。

class Quiz(models.Model):
    ...

それはあなたの人生が慣習に従うのをより簡単にするでしょう=)

于 2011-10-06T03:51:50.570 に答える