私は、ユーザーが写真アルバムに入れることができる写真オブジェクトで満たされた写真ライブラリを持つことができる 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
- Django Many To Many Insert Orderingに対するDaniel Rosemanの回答
- djangoでManyToManyFieldの順序を定義するためのastevanovicの回答
中間モデルのアプローチは、アルバム内の写真の並べ替えには機能しますが、アルバムからの写真の削除には機能しません。中間モデルは、、、、または代入をサポート.add()
していません。彼らは、アルバム全体をクリアする方法のみをサポートしています。アルバム内の写真を注文しながら、一度に 1 枚の写真をアルバムから削除できるようにする必要があります。.create()
.remove()
.clear()
どうすればこれを達成できますか?