es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Django modelSerializer form.is_valid() es verdadero cuando los valores están vacíos.

Cuando ejecuto form.is_valid(), devuelve verdadero excepto para employee_count y branches_count. Cuando ejecuto form.save(), devuelve errores de clave.

serializers.py

class GeneralInformationFormSerializer(serializers.ModelSerializer):

    class Meta:
        model = Business
        fields = ['location', 'date_founded', 'employee_count', 'branches_count', 'business_premises']

    def update(self, instance, validated_data):
        return update_business_details(instance, validated_data)

Este es models.py

class Business(SyncedBusinessModel):
    location = models.TextField(blank=True)
    employee_count = models.IntegerField(blank=True, null=True)
    branches_count = models.IntegerField(blank=True, null=True)
    business_premises = models.CharField(max_length=255, blank=True, choices=BUSINESS_PREMISES_CHOICES)
    date_founded = models.DateField(blank=True, null=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "businesses"
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basado en la información proporcionada, parece que el problema está en la validación y el guardado de los campos ‘branches_count’ y ’employee_count’. Estos campos se definen en el modelo Business como IntegerFields con blank=True y null=True, lo que significa que son campos opcionales. Sin embargo, no está claro cómo se maneja la validación y el guardado de estos campos en las vistas o formularios.

    Una posible solución podría ser verificar si los valores de estos campos están presentes antes de llamar a la validación o al guardado del formulario. Por ejemplo, en la vista o formulario, se podría usar el diccionario ‘cleaned_data’ para acceder a los valores de estos campos y comprobar si no son None antes de llamar a is_valid() o save(). Aquí hay un ejemplo:

    def my_view(request):
        if request.method == 'POST':
            form = GeneralInformationForm(request.POST)
            if form.is_valid():
                # Verificar si employee_count y branches_count no son None
                if form.cleaned_data['employee_count'] is not None and form.cleaned_data['branches_count'] is not None:
                    # Llamar al método save() del formulario
                    form.save()
                else:
                    # Manejar el caso de error para campos faltantes
                    # por ejemplo, devolver una respuesta de error o mostrar el formulario con un mensaje de error
                    pass
            else:
                # Manejar errores de validación del formulario
                # por ejemplo, devolver una respuesta de formulario no válido o mostrar el formulario con mensajes de error
                pass
        else:
            # Manejar solicitud GET para mostrar el formulario
            pass
    

    En este ejemplo, primero comprobamos si el método de solicitud es POST y luego creamos una instancia de formulario con los datos de la solicitud. Si el formulario es válido, luego comprobamos si los valores de ’employee_count’ y ‘branches_count’ no son None. Si no son None, llamamos al método save() del formulario para guardar los datos. De lo contrario, manejamos el caso de error para campos faltantes. Si el formulario no es válido, manejamos los errores de validación del formulario.

    Tenga en cuenta que esta es solo una posible solución y puede haber otras formas de manejar este problema dependiendo de los requisitos específicos de su aplicación.

Comments are closed.