Django - Должен ли я использовать сквозную таблицу к структуре M2M - PullRequest
0 голосов
/ 14 июня 2011

Я хочу представлять клубы, в которых есть несколько членов (каждый участник также может вступать в несколько клубов).

Я создал следующую модель

   class Club(models.Model):
        name=models.CharField(max_length=100)
        admin=models.ManyToManyField(User, related_name='club_admins')
        member=models.ManyToManyField(User, related_name='memberships')
        posts=models.ManyToManyField(Post, blank=True, null=True)   
        description=models.TextField(max_length=500,blank=True)
        public=models.BooleanField(default=True)
        password=models.CharField(max_length=30, blank=True)

        def __unicode__(self):
          return self.name

Моя проблема сейчас заключается в том, что я связываю клубы с сообщениями, и я не уверен, как затем отсоединить их, не удаляя все ассоциации.

Это может быть не совсем понятно. У меня есть представление, которое содержит следующий фрагмент:

       if request.POST.get('clubs'):
                clubs=request.POST['clubs'].split(',')
                p=int(post.id)
                old_clubs=Club.objects.filter(posts__pk=p)
                for o in old_clubs:
                    #figure out how to disassociate the club with this post

                for a in clubs:
                    group=Club.objects.get(name=a)
                    group.posts.add(post)

То, что я пытаюсь сделать, это очистить все старые клубы, которые имеют отношения M2M с этим постом, а затем сформировать новые отношения. Все это основано на редактировании пользователем своего поста.

Я не уверен, как добраться до этой промежуточной таблицы, не удаляя все Клубы или все Сообщения или все Сообщения, связанные с Клубом (в отличие от просто выбора Сообщений).

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Если я не пойму неправильно, вам не нужно использовать от до .Любое поле M2Mfield, которое не используется, имеет add (item) , remove (item) , all () и clear() методов, поэтому

post = Post.objects.get(id=post.id)
post.clubs.clear()

Вы можете использовать all () для отображения всех связанных данных и add (item) и удалить (элемент) , чтобы добавить или удалить специальный.

Для получения дополнительной информации проверьте документацию

1 голос
/ 14 июня 2011

Я не уверен, что понимаю вашу проблему, может ли это помочь?

post = Post.objects.get(id=post.id)
post.clubs_set.clear()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...