猿问

动态实例特定的 Django 字段创建

我有一种情况,用户模型可以有“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()

就像我上面说的,这些唯一的字段必须是可查询的。帮助!


紫衣仙女
浏览 122回答 2
2回答

慕工程0101907

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

相关分类

Python
我要回答