【问题标题】:how to store a dictionary in django model as a field?如何在 django 模型中将字典存储为字段?
【发布时间】:2017-09-27 14:56:34
【问题描述】:

我正在尝试建立一个社交网络,并希望我的用户拥有 3 个隐私选项 [privtae、public、friends_except],

private 和 public 是布尔字段,friends_except 是用户列表

如果无法将 dict 作为字段存储在模型中,那么我该怎么做才能实现我想要的。

【问题讨论】:

标签: python django dictionary


【解决方案1】:

首先,如果您使用的是关系数据库,您可以创建一个包含所有这些属性的新模型,并将它们作为外键与主模型链接,或者将其非规范化以将所有字段分别存储在基本模型本身中.如果您使用的是像 MongoDB 这样的 nosql 系统,那么您当然可以将其存储为字典或 JSON 字段。

其次,由于用户一次只能选择一个隐私选项,为什么要使用单独的模型甚至字典类型构造。只需将其存储为 CharField 并指定选项即可。

PRIVACY_CHOICES = [('public', 'public'), ('private', 'private', ('custom', 'custom')]

privacy_choice = models.CharField(max_length=256, choices=PRIVACY_CHOICES)
friends_allowed = models.ManyToManyField('User', blank=True)

【讨论】:

  • 但是我主要关心的是朋友,除了如何实现你可以发送代码吗?
  • @LewisWedmore 对不起,我的错。检查我更新的答案。看看有没有道理。
  • 我为用户创建了 2 个布尔字段和 1 个多对多字段,并使用带有简单 if 语句的模型管理器并完成了工作,感谢您的帮助好友
  • @LewisWedmore 我很高兴。如果有帮助,请将其标记为正确答案。
【解决方案2】:

看,我建议您创建一个模型,而不是您的方法,假设是 Friends_except,其中 1 个字段作为用户模型的外键。您将能够将您想要阻止的所有用户发送到您被阻止的用户表

(这有点像在 facebook 上发生的)

然后在视图中,就可以很方便的进行简单的查询了

if:
    user.is_authentictaed and is not in users.friends_except.objects.all()

    " display your post" else Nah.

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2012-03-29
    • 2021-09-15
    • 2010-09-28
    • 2016-02-11
    • 2018-02-16
    • 2010-10-12
    • 2014-02-13
    • 2017-06-15
    相关资源
    最近更新 更多