【问题标题】:Django model structure in my project我项目中的 Django 模型结构
【发布时间】:2012-03-20 11:55:07
【问题描述】:

我正在创建一个基于文本的浏览器游戏,需要一些关于 django 模型结构的建议。所有示例都来自同一个项目,因此假设您已从上到下阅读了所有问题,我不会重复相同的信息。


第一个问题

我有一个 auth 应用程序,其中包含用户个人资料(Player 模型),alliance 应用程序包含有关所有工会玩家加入的信息,medals 应用程序代表玩家和联盟的奖励。

用户和联盟都可以分配奖牌,因此其中一种选择是在链接到 MedalPlayerAlliance 模型中创建 M2M 字段。

另一个选项将使medals 应用程序可用于我的任何其他项目。这种方法包括在Medal 模型中使用泛型关系,该模型链接到PlayerAlliance

哪种解决方案更像 django,或者我可以随心所欲地做吗?


第二个问题

会有一些任务供玩家完成。任务的场景差异很大,因此我需要某种方法来为每个任务编写独特的任务进度检查代码。

任务保存在包含奖励信息的数据库中(几乎相同)。我应该在哪里为每个任务编写唯一代码?也许我应该稍后添加一些字段并 eval() ?然后所有信息都将保存在数据库中。

此外,任务需要一些跟踪,例如,想象一个简单的任务是转到手动部分(只是为了确保玩家知道它在哪里)。然后我需要在某处注册玩家是否访问过手册页。我考虑在任务应用程序中创建另一个模型TaskTrackers。然后另一个问题出现了。如果我应该将 OneToOne 字段从 Player 添加到 TaskTrackers 或反之亦然?


总而言之,主要问题是我应该将 OneToOneFields/M2M 字段添加到用户配置文件模型还是将 OneToOneFields/Foreignes 从目标模型添加到用户模型?后者会使我的应用更可重用,但第一种方法可能更合乎逻辑。

等待答案。

【问题讨论】:

  • 顺便说一句,如果您要使用 Django 身份验证,调用应用程序“auth”不是一个好主意。也叫auth,两个同名的应用不太好(比如manage.py test auth)。

标签: database django django-models


【解决方案1】:

您的第一个问题是,您可以对 Medal 执行 M2M,也可以使用通用外键。您最终会得到几个使用 M2M 的连接表。使用通用外键,您将没有任何连接表,但您将获得内容类型的额外查询。因此,您可能需要同时设置两种方式,看看哪种方式对性能的影响更大

关于您的第二个问题,我可能会采用“任务”模型和一个或多个可以设置为内联表单集的“步骤”模型的方法。然后你需要一个像“CompletedPlayerTasks”或类似的表,其中包含玩家 ID、任务 ID 和步骤 ID。如果该表中存在步骤 ID,则任务已完成。

听起来您需要能够为每个任务的步骤创建自定义字段和表单,这在 Django 中并不难做到。有some off the shelf solutions 可以做到这一点,但您可能需要自己编写。

最后,我不会将保存您的用户配置文件的应用命名为“auth”,这可能会导致 Django 的 contrib.auth 应用出现命名空间问题。我将其命名为“配置文件”,以便更清楚地了解该应用的功能和包含的内容。

希望能给你一些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2020-03-27
    • 2017-08-01
    • 2012-04-28
    • 2023-04-01
    • 2020-11-13
    • 2019-03-18
    • 2015-05-19
    相关资源
    最近更新 更多