显示外键模型的所有字段

道森

我想要的是检索属于外键模型的所有字段。

我的模型例如:

class BaseProduct(models.Model):
    name = models.CharField(max_length=256)
    variant = models.CharField(max_length=256, default='N/A')
    type = models.ForeignKey(ProductType)

class ProductType(models.Model):
    name = models.CharField(max_length=256,blank=False,null=False)
    sofa = models.ForeignKey(SofaProduct, blank=True, null=True)
    toaster = models.ForeignKey(ToasterProduct, blank=True, null=True)

这些只是示例,可以有任意数量的ProductType模型,每个模型具有任意数量的字段。

在我的模板中,我可以使用BaseProduct ID显示BaseProduct的所有字段。我要显示的是FK的所有字段。

例如,如果BaseProduct中的type = Sofa,我需要检索并显示所有Sofa字段以及BaseProduct字段。

尤维

(免责声明:我倾向于给出很长的答案。您必须为此原谅我)

架构设计的第一条规则-它应该反映您的实际业务逻辑(不是您要注意实际业务操作,而是关系的含义)。例如,如果我有一个班级,则Person可以创建一个Pet带有foreginKey的班级,该班级可以Person转换为-每个人都可以养多只宠物。

如果将这种逻辑应用于您的架构,我们将看到ProductType该类具有对Sofas和Toasters都具有ForeignKey的类,这意味着每个Toaster可以具有多个Sofas,反之亦然。上次检查时,我从未听说过带烤面包机的沙发。

换句话说-您需要考虑您实际上在试图实现的目标。我猜这BaseProduct是一个具有共同领域的基础类,而Sofa和Toaster是不同类型的产品。由于它们是不同的,因此它们具有自己的特殊字段,并且不应该相关,因此将它们作为单独的模型是有意义的。那么,为什么还要ProductType呢?要定义名称Toaster您已经在定义整个模型!为什么需要将其名称保留在其他表上(而不是总是返回的某些自定义方法"I am a toaster, hear me roar")?

我最好的猜测是,您希望能够随时随地定义新的产品类型。但是,如果打算在模型级别上将它们分开,则必须为每个新产品创建一个模型。而且,如果您希望能够使用来简单地定义一个新模型ProductType,那么您要么需要一个Product类来管理它们,要么想要一个复杂的动态系统来动态创建新模型。

让我们分解一下这些选项:

  1. 创建通用产品和类型类,就像您在此处所做的那样:

    class ProductType(models.Model):
        name = models.CharField(max_length=256,blank=False,null=False)
    
    class Product(models.Model):
        name = models.CharField(max_length=256)
        variant = models.CharField(max_length=256, default='N/A')
        type = models.ForeignKey(ProductType)
    

    现在,每种产品只能是一种类型,您可以随时随地创建新的类型。当然,这意味着所有Product对象将共享相同的字段,并且是非常有限的。你不会有每种类型相同的灵活性,就像您之前(只沙发字段),但另一方面,它会更容易创建动态类型的对象-你只需定义一个新的ProductType和BAM你有一个整体新产品组。

  2. 创建一个基本的抽象产品模型,并为每种新型产品定义一个新的子模型。您将为每个模型都拥有更多的灵活性,但是定义新类型将始终需要定义一个新模型并为其建立一个表。使用这种方案,您根本不需要ProductType对象,因为不同的模型定义了不同的类型(无需重复)。

    您可以为该过程创建某种管理页面,但设置起来并不容易,最终可能会发现自己的表太多(如果您有时需要查询所有产品,这会特别成问题-将不得不联接很多不同的表,这不是很有效)。

  3. 使用具有某些动态模型非关系型数据库知道如何迪斯科*

*好吧,实际上比这要复杂得多,但是关于如何组合它们的解释太长了,即使是我的回答也是如此。如果它看起来在您的头上,那就不要管它了。如果您对非关系数据库的工作方式有一些了解,则可以自己解决

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Qt不显示模型的所有字段

来自分类Dev

保存时更新其他模型中所有m2m条目的外键字段

来自分类Dev

遍历抽象Django模型的所有与外键相关的子代

来自分类Dev

显示所有外键等于值的表

来自分类Dev

如何列出django中所有模型的所有关系和外键?

来自分类Dev

Django模型:使用外键中的字段

来自分类Dev

通过外键返回与模型相关的字段

来自分类Dev

django中不同模型字段的外键

来自分类Dev

对MVC中所有(显示的)模型字段执行通配符搜索?

来自分类Dev

删除包含外键的字段而不删除该字段包含 LARAVEL 的所有项目

来自分类Dev

如何通过外键获取 manytomanyfiled 的查询集(模型只有 2 个字段)

来自分类Dev

cakephp:如何显示外键表字段

来自分类Dev

从一个模型Laravel 8删除所有外键

来自分类Dev

在Django管理界面中使用所有外键引用模型的对象

来自分类Dev

Django:向所有与外键相关的模型添加对象实例

来自分类Dev

如何在django模型中使用外键获取对象的所有属性

来自分类Dev

给定一个主键,是否可以在 EF Core 模型中找到所有外键?

来自分类Dev

Django模型:汇总多个外键字段值的总和

来自分类Dev

外键与Django模型中的相关字段冲突

来自分类Dev

Django从模型返回特定字段作为外键

来自分类Dev

Django表单测试使用外键模型字段生成错误

来自分类Dev

Django外键的模型字段未正确更新

来自分类Dev

Django获取OneToMany字段的外键模型类型

来自分类Dev

Django从模型返回特定字段作为外键

来自分类Dev

在DJANGO模型中添加条件外键字段

来自分类Dev

使用JDBC获取所有外键

来自分类Dev

使用JDBC获取所有外键

来自分类Dev

从外键获取所有对象

来自分类Dev

所有外键都是“空”

Related 相关文章

  1. 1

    Qt不显示模型的所有字段

  2. 2

    保存时更新其他模型中所有m2m条目的外键字段

  3. 3

    遍历抽象Django模型的所有与外键相关的子代

  4. 4

    显示所有外键等于值的表

  5. 5

    如何列出django中所有模型的所有关系和外键?

  6. 6

    Django模型:使用外键中的字段

  7. 7

    通过外键返回与模型相关的字段

  8. 8

    django中不同模型字段的外键

  9. 9

    对MVC中所有(显示的)模型字段执行通配符搜索?

  10. 10

    删除包含外键的字段而不删除该字段包含 LARAVEL 的所有项目

  11. 11

    如何通过外键获取 manytomanyfiled 的查询集(模型只有 2 个字段)

  12. 12

    cakephp:如何显示外键表字段

  13. 13

    从一个模型Laravel 8删除所有外键

  14. 14

    在Django管理界面中使用所有外键引用模型的对象

  15. 15

    Django:向所有与外键相关的模型添加对象实例

  16. 16

    如何在django模型中使用外键获取对象的所有属性

  17. 17

    给定一个主键,是否可以在 EF Core 模型中找到所有外键?

  18. 18

    Django模型:汇总多个外键字段值的总和

  19. 19

    外键与Django模型中的相关字段冲突

  20. 20

    Django从模型返回特定字段作为外键

  21. 21

    Django表单测试使用外键模型字段生成错误

  22. 22

    Django外键的模型字段未正确更新

  23. 23

    Django获取OneToMany字段的外键模型类型

  24. 24

    Django从模型返回特定字段作为外键

  25. 25

    在DJANGO模型中添加条件外键字段

  26. 26

    使用JDBC获取所有外键

  27. 27

    使用JDBC获取所有外键

  28. 28

    从外键获取所有对象

  29. 29

    所有外键都是“空”

热门标签

归档