【问题标题】:django models and OOP designdjango 模型和 OOP 设计
【发布时间】:2014-07-22 21:25:47
【问题描述】:

我为一个在线游戏编写了一个任务系统。我的任务被序列化为 json objects 用于 JavaScript 客户端,该客户端从 REST 后端获取这些任务(我使用 django RestFramework)

现在我想知道应该将属于数据的“行为”放在哪个classdjango model 上。

我将属于某个任务的数据存储在几个单独的模型中: model QuestHistory: 与models.Fields 类似Boolean completedDatetime started 我将属于特定用户的信息(它也作为现场用户)放在其中。

然后我有一个 model QuestTemplate :始终相同的部分,例如 quest_titlequest_description 之类的字段

我还有一个model Rewardsmodel Task and TaskHistory,它们通过foreign Key field 链接到一个任务。

为了将这些信息组合回任务,我创建了一个纯 Python class Quest(object): 并在此类上定义了方法,例如 check_quest_completion。这个类是后来序列化的。这种方法的问题是它变得非常冗长,例如当我实例化这个类或定义序列化器时。

是否有 python 或 django“快捷方式”将 django model 的所有字段放入另一个类(我的 Quest 类在这里),可能类似于 dict.update 方法?

或者我应该尝试将方法放在models 上,然后去掉Quest class

我的游戏中有一些其他地方看起来与任务系统非常相似,例如库存系统,所以我希望有一个更优雅的解决方案。

【问题讨论】:

    标签: python django oop django-models


    【解决方案1】:

    你应该把Quest类的方法放在模型本身上,去掉Quest类。

    【讨论】:

    • 如果我想把任务作为一个“整体”,我想我仍然需要一个单独的任务类,以便与 Serializer 类一起使用。您是否有一个建议,例如,您可以放置​​一个方法来检查用户是否已完成属于此任务的所有任务?
    • 我认为这应该是对“用户”和“已完成”字段过滤的所有 QuestHistory 对象的查询。
    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2012-05-25
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多