django - 如何确保单个模型只有一个 BooleanField 为真?
问题描述
我有一个 django 项目,其中有一个 Videos 模型。在我的索引模板页面上,我只想显示一个视频,即 isFeatured 等于 true 的视频。每当我将另一个视频的 isFeatured 属性更改为 true 时,它应该使前一个视频的该属性为 false。
我已经检查了有关此的其他 stackoverflow 问题,但所有这些问题都在处理外键,而我的模型更简单,我认为有一个更简单的解决方案。
这就是我的模型的样子:
class Video(models.Model):
url = models.URLField(max_length=200)
isFeatured = models.BooleanField(default=False)
def __str__(self):
return self.url
解决方案
如果您真的不想或不能创建另一个模型,那么您唯一的解决方案就是通过代码来处理它。
解决此问题的唯一方法是必须使用代码更改行。
为了做到这一点,请创建一个执行此操作的函数并在任何地方使用它,而不是重写代码以避免错误。
video_isfeatured_changer(video_id):
# Change isFeatured for other featured videos to False.
featured_videos = Video.objects.filter(isFeatured=True).update(isFeatured=False)
video = Video.objects.get(pk=video_id)
video.isFeatured = True
video.save()
您还可以覆盖模型的save()
方法Video
。
推荐阅读
- javascript - 强制 Gatsby 中的导航功能仅在站点内重定向
- oracle - 安装 Oracle 数据库 11g 时检查 Oracle XE 服务实例失败我该怎么办
- angular - 如何在嵌套组件中使用 ng 内容
- python - 动画阻尼振荡器
- node.js - 在插入表之前检查重复项
- python - 为什么当我尝试在另一个文件中调用函数时解释器在 tkinter 中输出 namerror
- html - 如何通过以下方式使用 HTML 和 CSS 定位 3 个图像?
- javascript - Need help finding button id/class etc to click
- paypal - 如何使用 PayPal Payouts API 解决 INVALID_RESOURCE_ID 问题
- javascript - 记录点击事件并实时显示而不刷新