Как связать пользователя с моделью из CreateView?
Я пытаюсь создать приложение, которое позволяет учетным записям пользователей создавать, присоединяться, покидать, обновлять (если у них есть авторизация) и удалять группы. Проблема, с которой я столкнулся, заключается в том, чтобы найти способ связать две модели, чтобы учетные записи отображали созданные ими группы
users/models.py:
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
joined_groups = models.ManyToManyField(Group, related_name='joined_group')
created_groups = models.ManyToManyField(Group, related_name='created_group')
group/models.py
class Group(models.Model):
leader = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=55)
description = models.TextField()
joined = models.ManyToManyField(User, related_name='joined_group', blank=True)
Я смог найти способ, чтобы учетные записи присоединялись к группам:
def join_group(request, pk):
id_user = request.user.id
group = Group.objects.get(id=request.POST.get('group_id'))
account = Account.objects.get(user_id=id_user)
if group.joined.filter(id=request.user.id).exists():
group.joined.remove(request.user)
account.joined_groups.remove(group)
else:
group.joined.add(request.user)
account.joined_groups.add(group)
return HttpResponseRedirect(reverse('group_detail', args=[str(pk)]))
И это работало достаточно хорошо. Учетные записи теперь могли присоединяться к группам и отображать группы, к которым они присоединились. Но как добавить группу в процессе ее создания?
views.py:
class CreateGroup(CreateView):
model = Group
form_class = ChaburahGroup
template_name = 'create_group.html'
Как добавить функцию для добавления групп в Accounts created_groups после (или по мере) создания группы? Извините, если кода недостаточно, если нужно что-то еще, я добавлю.
В методе form_valid
можно делать все, что угодно. Если я правильно понимаю, что требуется...
def form_valid( self, form):
instance = form.save()
instance.joined.add( self.request.user) # add the creating user to the group
account = self.request.user.account
account.created_groups.add( instance)
return redirect( ... )