我有一个用Angular 9构建的前端和一个Django REST API来捕获订阅表单的电子邮件。
我会从前端验证条目,以确保它不存在于数据库中,然后才保存,如果它不存在。
下面是模型:
class Email(models.Model):
email = models.EmailField(max_length=50)
def __str__(self):
return str(self.email)
视图集:
class EmailViewSet(viewsets.ModelViewSet):
queryset = models.Email.objects.all()
serializer_class = serializers.EmailSerializer
def create (self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return Response(serializer.data,status=status.HTTP_201_CREATED)
def perform_create(self,serializer):
queryset = models.Email.objects.filter(email=request.data)
if queryset.exists():
raise ValidationError('Email exist!')
serializer.save(email=request.data)
1条答案
按热度按时间smdnsysy1#
您可以简单地将
email
字段标记为**unique=True
**[Django-doc]:Django REST框架中的序列化器将唯一性考虑在内,并将检查是否存在具有给定
email
的Email
。此外,唯一性也是在 * 数据库 * 级别强制执行的,因此通常情况下,如果数据库正常工作,则不可能创建具有相同email
值的第二条记录。在序列化程序中,可以使用以下命令指定错误消息: