я могу сохранить mac_address
к верхней в базе данных
И значение mac_address
должно быть уникальным в базе данныхДжанго рамки остальное: UniqueValidator copare поле преобразовать в прописные
Но если клиент посылает мне строчную JSON как {"mac_address":'aa:bb:cc:dd:eE'}
и моя база данных уже были mac_address
с 'AA:BB:CC:DD:EE'
Но клиент все еще есть 201 created success
Почему бы не моя UniqueValidator
работы ??
Пожалуйста, помогите мне найти
views.py
Стараюсь ListCreateAPIView
и APIView
И не может хорошо работать, я думаю, что проблема UniqueValidator
часть
Я нахожу document использование validate_<field_name>
Но Мои код не работает
class DataList(generics.ListCreateAPIView):
queryset = Data.objects.all()
serializer_class = DataSerializer
def perform_create(self, serializer):
mac_address = self.request.data['mac_address'].upper()
serializer.save(mac_address=mac_address, datetime=datetime.datetime.now(pytz.utc))
class DataList(APIView):
def post(self, request, format=None):
serializer = DataSerializer(data=request.data)
if serializer.is_valid():
mac_address = request.data['mac_address'].upper()
serializer.save(mac_address=mac_address, datetime=datetime.datetime.utcnow().replace(tzinfo=pytz.utc))
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
И сериализовать valida tor необходимо сначала преобразовать в нижний регистр, затем запросить базу данных.
class DataSerializer(serializers.ModelSerializer):
datetime = ReadOnlyField()
mac_address = CharField(max_length=50,
validators=[UniqueValidator(queryset=Data.objects.all())]
)
def validate_mac_address(self,value):
return value.upper()
Как '' '' 'valid_email'''' знаю, чтобы преобразовать '' '' email'''', чтобы понизить ?? У меня есть имя поля '' '' address'''', и я использовал '' '' valid_address'''', но не работал – user2492364
@ user2492364 DRF выполняет valid_, если существует. –
levi
Обратите внимание, что правильный префикс validate_ и not valid_. –