【问题标题】:Django model relations [nesting and hierarchy]Django 模型关系 [嵌套和层次结构]
【发布时间】:2021-04-30 07:04:10
【问题描述】:

对于新手问题以及已经回答的问题,我提前道歉。我已经搜索了多个术语,但没有弄清楚。

我正在尝试找出模型架构及其在 Django 项目中的关系。 这样做时出现的问题如下:

关于代码的第一部分:(国家>州>城市>大学>部门>主题):

  • 层级是否太多?有什么方法可以更好或更有效地对其进行建模? 我也一直在寻找嵌套关系(序列化程序),但不知道是否有更好的组织方式。

  • 让模型(例如州或城市)在层次结构中只有一个字段是一种好习惯吗? 我的意思是,我需要它们,但不确定它们是否可以避免,因为它们与另一个模型关系解决方案很简单。

  • “模型”可以访问其第二个/第三个/第 n 个父级吗?例如:主题可以通过以下方式轻松访问其部门:

    Subject.objects.filter(department__name='Maths')

    但是可以从主题对象访问大学或州吗?怎么样?
    ** 已由daneil James回答

关于代码的第二部分(个人和笔记本电脑):

  • 我在模特中担任过几个角色(总裁、院长、主任、老师)。其中一些字段具有多对多关系:

    例如:一名教师可以从事多个学科,而一个学科可以拥有多个教师。

我假设我可以使用内置的用户 API 和角色/组来解决这个问题。所以最后,校长或老师都是角色,但不知道如何以这种方式实现它,或者它是否是一个好主意。

  • 关于笔记本电脑,假设大学有一些笔记本电脑(ManyToOne 关系),这很简单。 但是这些笔记本电脑被分配到一个部门和一个主题。在笔记本电脑型号中,我是否需要大学、系和学科的外键?

如何正确计算它们或拥有注册表? 大学有 10 台笔记本电脑,分配给 2 个系和 5 个科目。

再次,如果问题太基本,我深表歉意。

提前致谢!


模型架构:(伪代码)

class Country(models.Model):
    name: 
    extension:
    currency:
    <<president>>:

class State (models.Model)
    name:
    **country: models.ForeignKey(Country)**

class City (models.Model)
   name:
   **state: models.ForeignKey(State)**

class University(models.Model)
    name:
    address:
    <<dean>>:
    **city: models.ForeignKey(City)**
    laptop:

class Department(models.Model)
    name:
    <<director>>:
    **university: models.ForeignKey(University)**
    laptop:

class Subject(models.Model)
    name:
    description:
    <<teacher>>:
    **department: models.ForeignKey(Department)**
    laptop:

class Person(models.Model):
    name: 
    address:
    age:

class Laptop(models.Model):
    brand:
    model:
    serial:
    date:
    

【问题讨论】:

    标签: django database model relationship


    【解决方案1】:

    关于 “模型”可以访问其第二个/第三个/第 n 个父级吗?例如:一个主题可以通过以下方式轻松访问其部门: 是的,您可以在 django 中遵循前后关系

    `Subject.objects.filter(department__university__city__country = 'Your query')`
    

    如果父级的关系是一对多,你可以使用_set

    `Subject.objects.filter(department__university__city__country_set = 'Your query')`
    

    【讨论】:

    • 酷,非常感谢!我赞成答案,但我的声誉不允许在公开帖子(或类似的东西)中显示投票
    • 仍然了解它的工作原理,但我认为这意味着帖子解决了?我的意思是,我也想从其他用户那里得到一些关于我的其他问题的答案 PS:如前所述,只是假设并且仍然是新手,如果我穿坏了,请纠正我 :)
    • 是的,您仍然可以等待完整的详细答案,但您可以在链式关系上前进或后退
    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多