我正在构建一个 Web 应用程序,它允许用户拥有一个照片库,里面装满了照片对象,他们可以将这些照片对象放入相册。他们可以执行以下操作:
- 将照片添加到相册
- 从相册中删除照片
- 更改相册中照片的顺序
- 将同一张照片放入多个相册
- 将一张照片多次放入相册
最初,我曾想过编写这样的模型(简化):
def Photo(models.Model):
user = models.ForeignKey(User)
img_file = models.ImageField(upload_to = img_get_file_path)
upload_date = models.DateTimeField(auto_now_add = True)
def Album(models.Model):
title = models.CharField(max_length = 50, required = False)
cover_img = models.ForeignKey(Photo)
album_contents = models.ManyToMany(Photo)
# a user's "photo library" isn't defined in a model, but
# rather by running the query:
# Photo.objects.filter(user = request.user).order_by('upload_date')
这种简单的方法会很有效,除了用户不能更改相册中照片的顺序(ManyToMany 关系没有排序)。我已经为此寻找解决方案,并且每个人都指向使用中间模型,使用以下through
语句:
中间模型方法适用于对相册中的照片进行排序,但不适用于从相册中删除照片。中间模型不支持.add()
, .create()
, .remove()
, 或赋值。他们只支持.clear()
清除整张专辑的方法。我需要用户能够一次从相册中删除一张照片,同时仍然能够订购相册中的照片。
我怎样才能做到这一点?