Django 模型设计 - 如何处理多个可选属性?
Django model design - How to handle multiple optional attributes?
我是 Django 的新手(但经验丰富的开发人员),我正在开始构建我的第一个 Django 项目。
该项目非常简单:一个人们可以参加活动的网站。管理员设置体育赛事,选择日期、赛事类型(运行、网球比赛、骑自行车)等,用户可以参加。
我的问题是事件内部的数据可能会非常不同,具体取决于他的类别。例如,如果是两人团体网球比赛,用户应该输入自己的名字和队友的名字,他们的队名等。如果是骑自行车,他可以选择走困难路线还是走容易路线等
我知道我可以为每种事件创建一个包含所有属性的大模型,但这是一个非常丑陋的设计...所有注册应该有一个通用的 table,带有 link 到事件和基本和通用数据(姓名、地址、phone、电子邮件等),但我不知道如何处理每个 sport/event 类别的特定数据。 .. 关于如何在 Django 模型中组织这个的任何想法?也许添加一个简单的 (key, inscription_id, type, value)
table?然后,如何呈现表单?
我相信你建议的是 Entity-attribute-value
模型
http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
我认为将所有属于您的事件的数据保留在模型内部定义而不是通过相关的通用 EAV table。
为此,您可以使用 django 的多态库之一。我在生产中使用了 django-model-utils' InheritanceManager。有很多库,包括 django-polymorphic。
采用基于继承的方法,您可以定义单个 Event
模型或 Sport
模型。一项运动可能有名称、联赛等。所有 Event
可能有开始日期、结束日期和运动。
使用这种方法,您可以定义从注册到基础 Event
class 的外键,并使用内置于 ORM 中的 djangos select 所有事件或某些类型的注册,而无需进行附加应用程序 logic/object 检查/ 属性 检查采用 EAV 进近!
您可以使用 JSON 对象或其他序列化程序将所有附加数据存储在文本字段中。
我是 Django 的新手(但经验丰富的开发人员),我正在开始构建我的第一个 Django 项目。
该项目非常简单:一个人们可以参加活动的网站。管理员设置体育赛事,选择日期、赛事类型(运行、网球比赛、骑自行车)等,用户可以参加。
我的问题是事件内部的数据可能会非常不同,具体取决于他的类别。例如,如果是两人团体网球比赛,用户应该输入自己的名字和队友的名字,他们的队名等。如果是骑自行车,他可以选择走困难路线还是走容易路线等
我知道我可以为每种事件创建一个包含所有属性的大模型,但这是一个非常丑陋的设计...所有注册应该有一个通用的 table,带有 link 到事件和基本和通用数据(姓名、地址、phone、电子邮件等),但我不知道如何处理每个 sport/event 类别的特定数据。 .. 关于如何在 Django 模型中组织这个的任何想法?也许添加一个简单的 (key, inscription_id, type, value)
table?然后,如何呈现表单?
我相信你建议的是 Entity-attribute-value
模型
http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
我认为将所有属于您的事件的数据保留在模型内部定义而不是通过相关的通用 EAV table。
为此,您可以使用 django 的多态库之一。我在生产中使用了 django-model-utils' InheritanceManager。有很多库,包括 django-polymorphic。
采用基于继承的方法,您可以定义单个 Event
模型或 Sport
模型。一项运动可能有名称、联赛等。所有 Event
可能有开始日期、结束日期和运动。
使用这种方法,您可以定义从注册到基础 Event
class 的外键,并使用内置于 ORM 中的 djangos select 所有事件或某些类型的注册,而无需进行附加应用程序 logic/object 检查/ 属性 检查采用 EAV 进近!
您可以使用 JSON 对象或其他序列化程序将所有附加数据存储在文本字段中。