【问题标题】:django : boolean field mutually exclusive between child rowsdjango:子行之间互斥的布尔字段
【发布时间】:2018-10-15 06:10:31
【问题描述】:

第一次在这里发帖:) 我正在通过一个简单的相册应用程序学习 python 和 django 框架。我现在只在管理站点工作,django 是 v.2.1。

有一个相册表和一个图像表。一个相册可以有很多张图片,一张图片可以关联很多张相册,所以我通过一个中间表来建模一个多对多的关系。

我的相册更改页面有一个内嵌的图像。这一切都很简单,而且效果很好。

除了两个父表PK外,中间表还有一个额外的布尔字段“isCover”,以便用户可以选择相册中的图像作为封面。但是,在内联中没有办法强制只检查一张图像作为封面。另外,如果用户没有选择,我希望自动选择第一张图片作为封面的功能。

如何实现?

提前感谢您的任何见解! 乔

【问题讨论】:

  • 请添加一些代码,以便开发人员可以帮助您。那么请准确地说,您实际上是在哪里遇到问题。

标签: python django boolean photo-gallery inlines


【解决方案1】:

您可以在多对多字段中使用 through 关键字创建中间表:

 class Album(models.Model):
     name = models.CharField(max_length=100)
 class Image(models.Model):
    image = models.ImageField()
    album = models.ManyToManyField(Album, through=AlbumImage)

 class AlbumImage(models.Model):
  image = models.ForeignKey(Image)
  album = models.ForeignKey(Album)
  is_cover = models.BooleanField()

【讨论】:

  • 感谢阿曼花时间回答。中间表已创建,与您显示的完全一样。问题是,对于给定的专辑,我不能强制只有一个孩子将 is_cover 设置为 true - 用户可以将它们全部设置为 true 或全部设置为 false。
  • 不,您可以将一个 imgae 设置为封面 true,例如带有图像 x 的专辑 a 是令人垂涎的, AlbumImage.objects.filter(image=z, album=a).update(is_cover=True)
  • 好吧,所以没有内置方法,必须做一些验证代码。没什么大不了的,但我想在模型级别上这样做。我正在调查那里可用的各种验证器。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2013-05-22
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多