我是Django的新手(但是经验丰富的开发人员),我开始构建我的第一个Django项目。
项目非常简单:人们可以加入活动的网站。管理员设置体育赛事,选择日期,赛事类型(跑步,网球比赛,自行车)等,用户可以加入。
我的问题是,事件内部可能有非常不同的数据,具体取决于他的类别。例如,如果是两人团队网球比赛,用户应该输入他的名字和他的队友名字,他们的球队名称等。如果比赛是自行车,他可以选择他是否想要困难或简单的路线等等。
我知道我可以为每种事件创建一个包含所有属性的大型模型,但这是一个非常难看的设计......所有注册都应该有一个公共表,其中包含指向事件和基本的链接和常见数据(姓名,地址,电话,电子邮件等),但我不知道如何处理每个运动/事件类别的具体数据...有关如何在Django模型中组织这个的任何想法?也许添加一个简单的(key, inscription_id, type, value)
表?然后,我该如何呈现表单?
答案 0 :(得分:2)
我相信你建议的是Entity-attribute-value
模型
http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
我认为可以有一个很好的论据,可以保留属于您在模型中定义的事件的所有数据,而不是通过相关的通用EAV表。
要做到这一点,你可以使用django的多态库之一。我在制作中使用了django-model-utils' InheritanceManager。有很多库包括django-polymorphic。
采用基于入侵的方法,您可以定义单个Event
模型或Sport
模型。一项运动可能有一个名字,联赛等。所有Event
可能都有开始日期和结束日期和运动。
使用此方法,您可以从注册到基础Event
类定义foriegn键,并使用ORM中构建的djangos选择某些类型的所有事件或注册,而无需额外的应用程序逻辑/对象检查/属性检查采取EAV方法!
答案 1 :(得分:0)
您可以使用JSON对象或其他序列化程序将所有其他数据存储在“文本”字段中。