Django模型设计如何处理多个可选属性?

2024-10-02 00:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手(但是是一个经验丰富的开发人员),我开始构建我的第一个Django项目。你知道吗

这个项目非常简单:一个人们可以加入活动的网站。管理员设置体育赛事,选择日期、赛事类型(跑步、网球比赛、自行车赛)等,用户可以加入。你知道吗

我的问题是,事件中可能有非常不同的数据,这取决于他的类别。例如,如果是两人组的网球比赛,用户应该输入他的名字和队友的名字,他们的球队的名字等。如果比赛是一个自行车赛,他可以选择他想要的是困难的还是容易的路线等

我知道我可以创建一个大模型,为每一种事件的所有属性,但这是一个非常丑陋的设计。。。所有注册都应该有一个公共表,有一个指向事件的链接以及基本和公共数据(姓名、地址、电话、电子邮件等),但我不知道如何处理每个运动/事件类别的特定数据。。。你知道如何在Django模型中组织这个吗?或者添加一个简单的(key, inscription_id, type, value)表?那么,我该如何呈现窗体呢?你知道吗


Tags: 数据项目django用户模型开发人员网站管理员
2条回答

我相信你所建议的叫做Entity-attribute-value模型

http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

我认为将属于事件的所有数据都保存在模型中,而不是通过相关的泛型EAV表,这可能是一个很好的理由。你知道吗

为此,您可以使用django的多态库之一。我在生产中使用了django-model-utils' InheritanceManager。有相当多的库,包括django多态。你知道吗

采用基于固有的方法,您可以定义单个Event模型或Sport模型。一项运动可能有名称、联赛等。所有的Event都可能有开始日期、结束日期和运动。你知道吗

使用这种方法,您可以将注册中的外键定义到基Event类,并使用djangos内置ORM来选择特定类型的所有事件或注册,而无需采用EAV方法的附加应用程序逻辑/对象检查/属性检查!你知道吗

您可以使用JSON对象或其他序列化程序将所有附加数据存储在文本字段中。你知道吗

看看django-jsonfield

相关问题 更多 >

    热门问题