Адрес электронной почты участника добавляется во все встречи, а не только в ту, к которой он присоединился. Django
Следую руководству по созданию встреч и разрешению участникам присоединяться к ним. При добавлении участника (его адреса электронной почты) с помощью формы, адрес электронной почты добавляется во все встречи, а не только в ту, к которой он присоединился. Я новичок в Django, но кажется, что проблема в отношениях ManyToMany.
Models.py
from django.db import models
class Location(models.Model):
name = models.CharField(max_length=200)
address = models.CharField(max_length=300)
def __str__(self):
return f'{self.name} ({self.address})'
class Participant(models.Model):
email = models.EmailField(unique=True)
def __str__(self):
return self.email
class Meetup(models.Model):
title = models.CharField(max_length=200)
organizer_email = models.EmailField()
date = models.DateField()
slug = models.SlugField(unique=True)
description = models.TextField()
image = models.ImageField(upload_to='images')
location = models.ForeignKey(Location, on_delete=models.CASCADE)
participants = models.ManyToManyField(Participant, blank=True)
def __str__(self):
return f'{self.title} - {self.slug}'
Views.py
from django.shortcuts import render, redirect
from .models import Meetup, Participant
from .forms import RegistrationForm
# Create your views here.
def index(request):
meetups = Meetup.objects.all()
return render(request, 'meetups/index.html', {
'meetups': meetups
})
def meetup_details(request, meetup_slug):
try:
selected_meetup = Meetup.objects.get(slug=meetup_slug)
if request.method == 'GET':
registration_form = RegistrationForm()
else:
registration_form = RegistrationForm(request.POST)
if registration_form.is_valid():
user_email = registration_form.cleaned_data['email']
participant, _ = Participant.objects.get_or_create(email=user_email)
selected_meetup.participants.add(participant)
return redirect('confirm-registration', meetup_slug=meetup_slug)
return render(request, 'meetups/meetup-details.html', {
'meetup_found': True,
'meetup': selected_meetup,
'form': registration_form
})
except Exception as exc:
return render(request, 'meetups/meetup-details.html', {
'meetup_found': False
})
def confirm_registration(request, meetup_slug):
meetup = Meetup.objects.get(slug=meetup_slug)
return render(request, 'meetups/registration-success.html', {
'organizer_email': meetup.organizer_email
})
Forms.py
from django import forms
class RegistrationForm(forms.Form):
email = forms.EmailField(label='Your email')