【问题标题】:Enforcing unique foreign key in Django subclass but not in base class在 Django 子类中而不是在基类中强制执行唯一外键
【发布时间】: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


【解决方案1】:

如何使用这个:one to one relationships

【讨论】:

  • 我经常使用resources = Resource.objects.all()等来获取(然后遍历)所有资源的列表,使用instanceof()区分它们;类层次结构对于这些情况非常有用。我看不出这个链接对我有什么帮助,它的例子似乎消除了这种可能性。
猜你喜欢
  • 2014-03-29
  • 2010-09-10
  • 1970-01-01
  • 2011-06-19
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多