在模型Django中创建变量字段

时间:2017-02-04 22:59:16

标签: django database django-models

我想问用户他们想问多少问题;基于他们的反应,我想用这么多领域填充一个模型。我目前正在考虑这样做的方式如下:

from __future__ import unicode_literals
from django.db import models

class Interview(models.Model):
    title = models.TextField()
    description = models.TextField()
    number_questions = models.IntegerField()
    question_one = models.ForeignKey('Question', related_name='question_one')
    question_two = models.ForeignKey('Question', related_name='question_two')
    question_three = models.ForeignKey('Question', related_name='question_three')
    question_four = models.ForeignKey('Question', related_name='question_four')
    question_five = models.ForeignKey('Question', related_name='question_five')

class Question(models.Model):
    question_description = models.TextField()
    prep_time = models.IntegerField()
    response_time = models.IntegerField()

我意识到这种解决方案效率低下,因为a)用户仅限于预设数量的问题,b)如果用户指定少于5个问题,则会创建不必要的问题条目。存储多个问题的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

反过来做外键关系。这就是你对many-to-one relation建模的方式:

class Interview(models.Model):
    title = models.TextField()
    description = models.TextField()

    @property
    def number_questions(self):
        return self.questions.count()

class Question(models.Model):
    interview = models.ForeignKey(Interview, related_name='questions')
    question_description = models.TextField()
    prep_time = models.IntegerField()
    response_time = models.IntegerField()

现在您可以通过以下方式访问面试问题:

interview.questions.all()

Interview现在可以拥有任意数量的Questions。 顺便说一下,原始related_name模型中所有ForeignKeys的{​​{1}}应该Interview来表达任何语义。