#python #json #django
#python #json #django
Вопрос:
Пока это мой код.
def post(self, request):
if serializer.is_valid():
if not request.data['valor_sensor']:
request.data['valor_sensor'] = "ERRO"
serializer = serializers.EventosSerializer(data=request.data)
serializer.save()
return Response(serializer.data, status.HTTP_201_CREATE
Вот модели:
from django.db import models
class Eventos(models.Model):
horario = models.CharField(max_length=100)
tag_sensor = models.CharField(max_length=100)
valor_sensor = models.CharField(max_length=100)
И вот мой сериализатор.
from rest_framework import serializers
from .models import Eventos
#criando o serializers que transforma em JSON
class EventosSerializer(serializers.ModelSerializer):
class Meta:
model = Eventos
fields = ['id', 'horario', 'tag_sensor', 'valor_sensor']
Мне нужно взять поле valor_sensor
из этого json, и когда я его соберу, ЕСЛИ ОНО ПУСТОЕ, мне нужно преобразовать его в строку "ERROR"
. Кто-нибудь знает, как это сделать?
Комментарии:
1. Является ли сериализатор объектом модели Django? Если да, можете ли вы опубликовать класс модели?
2. Отредактировано для вас @sytech
Ответ №1:
Вы можете сделать это, возможно, одним из нескольких способов:
Вы можете использовать проверку на уровне поля, чтобы преобразовать его в своем сериализаторе:
class EventosSerializer(serializers.ModelSerializer):
class Meta:
model = Eventos
fields = ['id', 'horario', 'tag_sensor', 'valor_sensor']
def validate_valor_sensor(self, value):
if not value:
value = 'ERROR'
# other validation steps
return value
Или проверка на уровне объекта
class EventosSerializer(serializers.ModelSerializer):
...
def validate(self, data):
if not data.get('valor_sensor'):
data['valor_sensor'] = 'ERROR'
return super().validate(data)
Вы можете установить значение по умолчанию для своей модели:
class Eventos(models.Model):
...
valor_sensor = models.CharField(max_length=100, default='ERROR')
Вы можете переопределить save
метод вашей модели:
class Eventos(models.Model):
def save(self, *args, **kwargs):
if not self.valor_sensor:
self.valor_sensor = 'ERROR'
return super().save(*args, **kwargs)
Комментарии:
1. Я перепробовал все 3, и я все равно получил сообщение об ошибке, в котором говорится, что поле пусто из api. Я пытаюсь опубликовать в API через локальный сервер rest framework.
2. @LucasOutor можете ли вы обновить вопрос с полным кодом в вашем представлении и любыми сообщениями об ошибках / журналах?
3. Вероятно, вы захотите передать
partial=True
при создании объекта serializer или установитьrequired=False
в классе serializer для поля.4. Это сработало после того, как я указал, что поле может быть пустым, и я использовал второй вариант! Спасибо!! @sytech