我想问用户他们想问多少问题;基于他们的反应,我想用这么多领域填充一个模型。我目前正在考虑这样做的方式如下:
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个问题,则会创建不必要的问题条目。存储多个问题的更好方法是什么?
答案 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
来表达任何语义。