두 가지 모델에 표준 방식으로 다 대다 관계 설정이 있습니다.Django : 많은 관계가 많은 관계로 교환하기
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'
는 기본적으로 스왑이 발생한다.
감사하지만 작동하지 않았습니다. 나는 해결 방법을 찾았지만 .. 내 대답을 참조하십시오. –