加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读