【发布时间】:2019-12-19 05:48:53
【问题描述】:
我有一个名为 Post 的表。一个帖子可以有 2 个视频或 2 个图像,但不能同时有。帖子的表架构如下所示:
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
header = models.CharField()
created_at = models.DateTimeField(auto_now_add=True)
我有两张看起来很相似的表格:
class PostImage(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
img = models.ImageField()
class PostVideo(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
video = models.FileField()
如何创建和强制执行这样的关系:帖子最多可以包含 2 个图像或 2 个视频,但不能同时包含视频和图像?或者有更好的方法吗?
【问题讨论】:
-
保存2张图片时,可以检查该用户是否有PostVideo模式的视频,反之亦然。
-
或者你可以只创建一个带有 OneToOneField 的模型来发布,并在这个模型中创建 arrayfield 来保存两个元素。
-
@sandeep 我将在哪种保存方法中编写此代码?后保存方法还是其他两种模型?
-
如果您使用第一种方法,请在保存图像/视频之前检查。但我认为你应该使用第二种方法。那么您不必检查任何内容,因为它是 OneToOneField,您可以在 ArrayField 中保存两个元素(视频或图像)
标签: django django-models