私は標準的な方法で2つのモデルに多対多の関係を設定しています。
class UserSet(models.Model):
name = models.CharField(max_length=256)
items = models.ManyToManyField(Item, blank=True, through='ItemUserSet')
class ItemUserSet(models.Model):
set = models.ForeignKey(UserSet)
item = models.ForeignKey(Item)
order = models.IntegerField()
だから私は基本的にたくさんのアイテムを持っていて、どんな数のユーザーも自分の個人的なリストのためにアイテムのセットを作成することができます。
ユーザーが自分のリストのアイテムを別のアイテムと交換できるようにしたいのですが、このアクションは、あるユーザーが交換したアイテムを持っている他のユーザーのリストでもスワップを実行します。
orig_item = Item.objects.get(uuid=orig_uuid)
repl_item = Item.objects.get(uuid=repl_uuid)
board_uuid = request.GET['board'] or None
board = UserSet.objects.filter(uuid=board_uuid)
ius = ItemUserSet.objects.filter(item__uuid=orig_uuid)
for u_set in board:
u_set.items_set.remove(orig_item)
u_set.items_set.add(repl_item)
c['msg']='OK'
for sets in ItemUserSet:
sets.item = repl_item.pk
sets.save()
しかし、これは機能しません。このエラーが発生します。
'ManyRelatedManager' object has no attribute 'remove'
基本的に、1人のユーザーがスワップする2つのアイテムを選択したときに、そのアイテムがいずれかのユーザーボードにある場合、スワップが発生するはずです。