Мне нужно получить пустое поле json в моем Django и собрать его как ошибку

#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