为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2021-06-07 16:59:14
我有一种情况,用户模型可以有“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个赞

从您的问题中不清楚这些是否完全是任意的“这些字段的任何组合都可能存在”,是否存在可以使可能的组合更容易处理的子集,或者甚至是否预定义了完整的可能字段集,但您可能至少有以下选择之一。

  1. 编写一个包含所有可能字段的单个 User 类(或用户配置文件类),其中的字段可能位于一个用户上,但不能在另一个用户上设置为null=True.

  2. 有多个用户类型扩展用户(或其超类之一)具有不同的字段。

  3. 在查询单个用户模型时,编写一个自定义管理器来(昂贵地)解压 JSON 或其他多值字段,以从查询中手动删除自定义字段并将它们应用于初步结果集。

  4. 将用户配置文件模型链接到您的 User 类,然后将其子类化以添加可能字段的各种组合。

继承可以把这种情况变成一种真正的痛苦,所以这是我会避免的......对于你描述的情况,我认为 #1 可能是最合适的。如果null=True不适合您的用例,您的选项就会变得不那么可口、可读和可维护。

注意:@henriquesalvaro 的答案是在我写这篇文章时提出的,似乎优于以下选项。无论如何,我都会发布这个,以防 JSONField 不是你可以使用的东西。


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号