我有一种情况,用户模型可以有“X”个需要添加的唯一字段。这些字段需要运行查询,所以我不能只添加一个包含 JSON 字符串的字段。例如,一个用户可能看起来像:class User(models.Model): name = models.CharField() age = models.IntegerField() sex = models.CharField() profession = models.CharField()接下来可能是:class User(models.Model): name = models.CharField() age = models.IntegerField() sex = models.CharField() badge_number = models.IntegerField()就像我上面说的,这些唯一的字段必须是可查询的。帮助!
2 回答

慕工程0101907
TA贡献1887条经验 获得超5个赞
从您的问题中不清楚这些是否完全是任意的“这些字段的任何组合都可能存在”,是否存在可以使可能的组合更容易处理的子集,或者甚至是否预定义了完整的可能字段集,但您可能至少有以下选择之一。
编写一个包含所有可能字段的单个 User 类(或用户配置文件类),其中的字段可能位于一个用户上,但不能在另一个用户上设置为
null=True
.有多个用户类型扩展用户(或其超类之一)具有不同的字段。
在查询单个用户模型时,编写一个自定义管理器来(昂贵地)解压 JSON 或其他多值字段,以从查询中手动删除自定义字段并将它们应用于初步结果集。
将用户配置文件模型链接到您的 User 类,然后将其子类化以添加可能字段的各种组合。
继承可以把这种情况变成一种真正的痛苦,所以这是我会避免的......对于你描述的情况,我认为 #1 可能是最合适的。如果null=True
不适合您的用例,您的选项就会变得不那么可口、可读和可维护。
注意:@henriquesalvaro 的答案是在我写这篇文章时提出的,似乎优于以下选项。无论如何,我都会发布这个,以防 JSONField 不是你可以使用的东西。
添加回答
举报
0/150
提交
取消