gpt4 book ai didi

python - Django - 单真 bool 字段

转载 作者:太空狗 更新时间:2023-10-30 01:57:47 26 4
gpt4 key购买 nike

我想要一个 bool 字段,它只允许其中一个基于外键(用户)为 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)

我只希望 is_main 对于每个 owner 都为 True 一次,不超过一次。这些用于 API key 。因此,所有者可以拥有多个 API key ,但只有一个被设置为主 key 。这是我能弄清楚如何实现它的唯一方法。任何人都有更好的方法来做到这一点?如果重要的话,我正在使用 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, *args, **kwargs):
pass

关于python - Django - 单真 bool 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com