python – Django – 具有Single True的布尔字段
发布时间:2020-12-20 13:39:20 所属栏目:Python 来源:网络整理
导读:我想要一个布尔字段,它只允许其中一个基于外键(用户)为True.我现在肯定如何说这个或者真正搜索它,但我能够得到一个简单的实现工作,但我不喜欢它.感觉笨拙和错误.无论如何,获得我的意思的最好方法是你看到它,你走了: class MyModel(models.Model): owner = m
我想要一个布尔字段,它只允许其中一个基于外键(用户)为True.我现在肯定如何说这个或者真正搜索它,但我能够得到一个简单的实现工作,但我不喜欢它.感觉笨拙和错误.无论如何,获得我的意思的最好方法是你看到它,你走了:
class MyModel(models.Model): owner = models.ForeignKey(User) _is_main = models.BooleanField(default=False) def __get_is_main(self): return self._is_main def __set_is_main(self,is_main): if (is_main): active_keys = API_Key.objects.filter(_is_main=True,owner=self.owner) if (len(active_keys) == 1 and self in active_keys): return else: for key in active_keys: if (key.is_main): key.is_main = False key.save() self._is_main = is_main self.save() is_main = property(__get_is_main,__set_is_main) 我只希望每个所有者ONCE的is_main为True,不超过一次.这些是用于API密钥.因此,所有者可以拥有许多API密钥,但只有一个设置为主密钥.这是我弄清楚如何实现这一点的唯一方法.谁有更好的方法来做到这一点?如果重要,我正在使用MySQL. 解决方法
也许你不需要那个字段但是有一个指向主键的单例.这些方面的东西:
class Key(models.Model): owner = models.ForeignKey(User) @property def is_main(self): return hasattr(self,'is_main') def set_main(self): # update MainKey instance here class MainKey(models.Model): key = models.ForeignKey(Key,related_name='is_main') def save(self,*args,**kwargs): self.id = 1 super(MainKey,self).save(*args,**kwargs) def delete(self,**kwargs): pass (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python – NameError:未定义全局名称“logger”
- 正则化线性回归的方差与偏差!
- python中lambda函数 list comprehension 和 zip函数使用指南
- 我应该在Python中使用哪个Microdata解析器
- python – 尝试安装qrcode-0.2.1时出现“无法找到vcvarsall
- Flask SQLAlchemy一对一,一对多的使用方法实践
- python – Fedora上的psycopg2
- python – 如何更改系列中int元素的值
- Python常用时间操作总结【取得当前时间、时间函数、应用等】
- 骗子居然敢骗我的钱!看我不用Python短信轰炸死他!老实把钱