Я пытаюсь связать пользователя с учетной записью PayPal и только с одной. Это означает, что если в этом поле есть значение, запрос на публикацию должен вернуть «Там уже есть значение» или просто не работать (код состояния возврата 400).
Я пытался использоватьUniqueTogetherValidator в сериализаторе и использование и идентификатор, а также. Проблема с этим подходом состоит в том, что для него требуется поле 'id' в запросе на публикацию, которое еще не сгенерировано (идентификатор автоматически генерируется платформой).
Вот что я пытаюсь сделать с моимреализация сериализатора
class PaypalAffiliateSerializer(serializers.ModelSerializer):
# id = serializers.ReadOnlyField(required=False)
class Meta:
model = PaypalAffiliate
validators = [
UniqueTogetherValidator(
queryset=PaypalAffiliate.objects.all(),
fields=['paypal', 'id']
)
]
fields = ('paypal', 'id')
и вот моя модель
class PaypalAffiliate(models.Model):
paypal = models.EmailField()
affiliate = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.paypal
class Meta:
unique_together = ('paypal', 'affiliate')
А вот мое мнение
class PaypalAffiliateViewSet(mixins.CreateModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet,
mixins.RetrieveModelMixin,
mixins.ListModelMixin):
queryset = PaypalAffiliate.objects.all()
serializer_class = PaypalAffiliateSerializer
def get_queryset(self):
queryset = super().get_queryset()
queryset = queryset.filter(affiliate=self.request.user)
return queryset
def perform_create(self, serializer):
serializer.save(affiliate=self.request.user)
def perform_update(self, serializer):
serializer.save(affiliate=self.request.user)
Как я могу заставить поле электронной почты PayPal принимать только одинзначение для каждого пользователя?