【发布时间】:2017-08-26 15:47:00
【问题描述】:
我有一个相当简单的用户模型,可以完美运行。 为了减少代码冗余,我尝试将字段存储在字典中,原因您很容易猜到。
例子:
def get_social_token(self,social_net=""):
return self.social_dict[social_net]["token"]
如果我不做这样的结构,我必须做一些“if/then ... elif ... else”。 当然,每当我决定向我的应用添加新的社交网络时,我都需要修改我的代码。
我尝试了两种不同的方法,它们都给了我相同的结果:
- 没有错误
- 在数据库中实际上没有检测到和创建字段
我想提一下,如果我使用“常规方式”来实现这种行为,例如:
- twitter_social_token = EncryptedCharField(max_length=500, default='', blank=True, null=True)
它完美地工作,所以它来自字典的使用。
有什么办法解决这个问题吗? 顺便提一句。我宁愿避免使用新模型和外键......只有一对一关联,我宁愿不必执行任何“加入”或在另一个表中选择......
Bellow,你会发现我做的两次尝试都不起作用(我不知道为什么):
第一次尝试:
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)
感谢各位朋友的帮助,
乔纳森
【问题讨论】:
-
请不要发布代码截图;贴出实际代码。
-
哦,抱歉,我已经修复了我的消息。