【发布时间】:2012-11-26 23:59:45
【问题描述】:
我正在编写一个网站来托管一所大学的在线教育材料。我正在使用以下数据模型:
class Department(models.Model):
#snip - remaining fields involve department names, acronyms, etc.
class Course(models.Model):
department = models.ForeignKey(Department)
#snip
class Resource(models.Model):
# generic class for course syllabuses, exams, homework, and other documents
course = models.ForeignKey(Course)
class Syllabus(Resource):
#snip - fields for titles, URLs, and the like
class Homework(Resource):
#snip - similar fields to above
# and other similar subclasses
每个资源子类(教学大纲、家庭作业等)都通过基础资源类中的课程外键与一门课程相关联。我想强制 Syllabus 子类的外键唯一性(即每门课程只允许一个教学大纲),而不是其他子类,并保持类层次结构完整。
我试着四处寻找解决方案,但我找不到任何看起来很有希望的东西,尽管这可能是我缺乏 Django 经验的阻碍。如有任何快速帮助,我将不胜感激。
【问题讨论】:
-
您是否尝试过将 Resource 设为抽象基类?我不知道这是否允许您定义子类的唯一性,但它比子类化的分层表版本更有可能
-
我猜这里不是很有帮助,但是 Django 中的子类化很奇怪,并且充满了像这样的问题。很多时候重复代码确实是值得的。
-
我最终放弃了 Resource 类,让所有东西都成为 models.Model 的直接子类。最后,它更方便了。
标签: python django django-models