我以标准方式在两个模型上设置了多对多关系。
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'
基本上,当一个用户选择要交换的两个项目时,如果该项目在任何用户板上,则应该进行交换。