【发布时间】:2017-09-27 14:56:34
【问题描述】:
我正在尝试建立一个社交网络,并希望我的用户拥有 3 个隐私选项 [privtae、public、friends_except],
private 和 public 是布尔字段,friends_except 是用户列表
如果无法将 dict 作为字段存储在模型中,那么我该怎么做才能实现我想要的。
【问题讨论】:
标签: python django dictionary
我正在尝试建立一个社交网络,并希望我的用户拥有 3 个隐私选项 [privtae、public、friends_except],
private 和 public 是布尔字段,friends_except 是用户列表
如果无法将 dict 作为字段存储在模型中,那么我该怎么做才能实现我想要的。
【问题讨论】:
标签: python django dictionary
首先,如果您使用的是关系数据库,您可以创建一个包含所有这些属性的新模型,并将它们作为外键与主模型链接,或者将其非规范化以将所有字段分别存储在基本模型本身中.如果您使用的是像 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)
【讨论】:
看,我建议您创建一个模型,而不是您的方法,假设是 Friends_except,其中 1 个字段作为用户模型的外键。您将能够将您想要阻止的所有用户发送到您被阻止的用户表
(这有点像在 facebook 上发生的)
然后在视图中,就可以很方便的进行简单的查询了
if:
user.is_authentictaed and is not in users.friends_except.objects.all()
" display your post" else Nah.
【讨论】: