我有一个相当简单的用户模型完美工作。 为了减少代码冗余,我尝试将字段存储在胜利中,这是因为您可以轻松猜到。Django模型 - 如何在字典中存储字段
例子:
def get_social_token(self,social_net=""):
return self.social_dict[social_net]["token"]
如果我没有做这样的结构,我必须做一些 “的if/then ... elif的......别人”。 当然,当我决定向我的应用程序添加新的社交网络时,我需要修改我的代码。
我已经尝试了两种不同的方法,他们都给予我同样的结果:
- 没有错误
- 没有字段实际上在DB检测和创建
我会喜欢提及如果我使用“传统方式”来实现此行为,例如:
- twitter_socia l_token = EncryptedCharField(max_length = 500,default ='',blank = True,null = True)
它完美的工作,所以它来自于使用字典。
任何想法来解决这个问题? Btw。我宁愿避免使用新模型和外键...只有一对一的关联,我宁愿不必执行任何“加入”或在另一个表中选择...
贝娄,你会找到两次尝试我做不工作(我不知道为什么):
第一次尝试:
social_fields = {
'twitter' : {
'token' : EncryptedCharField(max_length=500, default='', blank=True, null=True),
'secret' : EncryptedCharField(max_length=500, default='', blank=True, null=True)
},
'facebook' : {
'token' : EncryptedCharField(max_length=500, default='', blank=True, null=True),
'secret' : EncryptedCharField(max_length=500, default='', blank=True, null=True)
},
'gplus' : {
'token' : EncryptedCharField(max_length=500, default='', blank=True, null=True),
'secret' : EncryptedCharField(max_length=500, default='', blank=True, null=True)
},
'linkedin' : {
'token' : EncryptedCharField(max_length=500, default='', blank=True, null=True),
'secret' : EncryptedCharField(max_length=500, default='', blank=True, null=True)
},
}
第二次尝试:
social_tokens = dict()
social_tokens["twitter"] = dict()
social_tokens["facebook"] = dict()
social_tokens["linkedin"] = dict()
social_tokens["gplus"] = dict()
social_tokens["twitter"]["token"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["twitter"]["secret"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["facebook"]["token"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["facebook"]["secret"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["linkedin"]["token"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["linkedin"]["secret"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["gplus"]["token"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
social_tokens["gplus"]["secret"] = EncryptedCharField(max_length=500, default='', blank=True, null=True)
感谢您的帮助亲爱的朋友们,
乔纳森
** **请不要发布的代码截图;张贴实际的代码。 –
对不起,我修正了我的消息。 –