Не разрешать регистрировать один и тот же email несколько раз

Я хотел бы, чтобы при подписке на рассылку можно было подписываться только на разные электронные адреса и не позволять одному и тому же электронному адресу подписываться несколько раз с сообщением о том, что этот адрес уже используется. Я не могу разобраться с этим, любая помощь будет принята с благодарностью. Код ниже, я добавил код, который я думал был полезен, если вам нужно больше, чтобы понять это, я могу разместить его, это небольшое приложение в большом проекте только для подписки на рассылку новостей по электронной почте.

шаблон новостного письма

admin.py

from django.contrib import admin

from .models import Subscriber

admin.site.register(Subscriber)

models.py

from django.db import models

class Subscriber(models.Model):
    email = models.EmailField(max_length=255)
    date_added = models.DateTimeField(auto_now_add=True)


    def __str__(self):
        return '%s' % self.email

views.py пуст

def clean_email(self):
    if User.objects.filter(email=self.cleaned_data['email']).exists():
        raise forms.ValidationError("the given email is already registered")
    return self.cleaned_data['email']

добавьте приведенный выше код в ваш models.py

Для любого поля, которое вы хотите дублировать, вы можете использовать unique=True в определении поля. Ваши модели должны определять что-то вроде следующего.

from django.db import models

class Subscriber(models.Model):
    email = models.EmailField(max_length=255, unique=True)
    date_added = models.DateTimeField(auto_now_add=True)


    def __str__(self):
        return '%s' % self.email

Другой подход заключается в использовании get_or_create, например, если подписчик уже существует, то возвращается сообщение об уже существующем подписчике, если нет, то создайте его. Ваша функция api_add_subscriber будет иметь вид

def api_add_subscriber(request):
    data = json.loads(request.body)
    email = data['email']
    subscriber, created = Subscriber.objects.get_or_create(email=email)
    if created:
        success = True
        msg = "You subscribed!"
    else:
        success = False
        msg = "This email has already subscribed!"
    return JsonResponse({'success': success, 'msg': msg})

И вы обрабатываете соответствующим образом во фронтенде;

Вернуться на верх