【发布时间】:2016-04-04 17:33:30
【问题描述】:
我的数据库中有下一个模型。 Question 代表一个问题和一个与之关联的投票,TextPollQuestion 在问题之前有一个文本,Answer 包含一个答案文本和问题的链接,UserAnswers 包含用户的答案:
class Question(models.Model):
question_text = models.CharField(max_length=200)
poll = models.ForeignKey(Poll, null=True, blank=True)
user_answers = models.ManyToManyField(UserProfile, through='UserAnswers')
class TextPollQuestion(Question):
text = models.CharField(max_length=450)
class Answer(models.Model):
answer_text = models.CharField(max_length=100)
question = models.ForeignKey(Question, null=True, blank=True)
class UserAnswers(models.Model):
question = models.ForeignKey(Question)
user = models.ForeignKey(UserProfile)
answer = models.CharField(max_length=40)
使用此代码,我必须创建Answer、UserAnswers 的另一个子类型以及连接到Question 模型的其他一些模型,以便将它们与TextPollQuestion 模型一起使用,但这显然违反了 DRY 原则。我应该使用什么来将所有模型链接到 Question 和 TextPollQuestion 的某些超类型并避免重复模型?
【问题讨论】:
-
我不认为它违反了 DRY 原则。你的问题和答案千差万别,没有太多抽象。
-
在定义模型时需要小心:请记住,创建模型类不仅会创建类,还会创建额外的数据库表。您的模型在设计时应该考虑到数据库模式,而不是考虑 DRY 原则。如有必要,您可以使用抽象模型使其更加干燥。
标签: django database django-models django-orm