Django 更改除一个以外的所有其他布尔字段
Django Change all other Boolean fields except one
我有一个模型,它有一个布尔字段:
class Library(SocialLinksModelMixin):
"""
Represents book shelves and places where people have / leave books.
"""
user = models.ForeignKey(...)
is_main = models.BooleanField(default=False)
用户可以拥有多个库,我希望允许设置主要库以简化应用程序中的流程。
仅将一个库 is_main 切换为 True 而将所有其他库切换为 False 的最简单方法是什么(主用户始终只有 1 个库)
我正在考虑查询所有库并更新每个库。也许还有另一种方法可以实现该功能?
如果您有 Library
的 主键 将 is_main
设置为 True
,您可以使用:
from django.db.models import Q
Library.objects.filter(user=<em>my_user</em>).update(
is_main=Q(pk=<em>my_pk</em>)
)
您可能还想在数据库级别强制执行 Library
和 is_main=True
per user
:
from django.conf import settings
from django.db.models import Q
class Library(SocialLinksModelMixin):
"""
Represents book shelves and places where people have / leave books.
"""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
is_main = models.BooleanField(default=False)
class Meta:
constraints = [
models.<strong>UniqueConstraint(</strong>fields=('user',), condition=Q(is_main=True), name='one_main_per_user'<strong>)</strong>
]
我有一个模型,它有一个布尔字段:
class Library(SocialLinksModelMixin):
"""
Represents book shelves and places where people have / leave books.
"""
user = models.ForeignKey(...)
is_main = models.BooleanField(default=False)
用户可以拥有多个库,我希望允许设置主要库以简化应用程序中的流程。
仅将一个库 is_main 切换为 True 而将所有其他库切换为 False 的最简单方法是什么(主用户始终只有 1 个库)
我正在考虑查询所有库并更新每个库。也许还有另一种方法可以实现该功能?
如果您有 Library
的 主键 将 is_main
设置为 True
,您可以使用:
from django.db.models import Q
Library.objects.filter(user=<em>my_user</em>).update(
is_main=Q(pk=<em>my_pk</em>)
)
您可能还想在数据库级别强制执行 Library
和 is_main=True
per user
:
from django.conf import settings
from django.db.models import Q
class Library(SocialLinksModelMixin):
"""
Represents book shelves and places where people have / leave books.
"""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
is_main = models.BooleanField(default=False)
class Meta:
constraints = [
models.<strong>UniqueConstraint(</strong>fields=('user',), condition=Q(is_main=True), name='one_main_per_user'<strong>)</strong>
]