Tengo un formulario Django en el que un usuario ingresa una entrada. Después de enviar, se les lleva a una URL asociada con su entrada.
La base de datos contiene associated_url campos user_input y Associated_url.
La user_input tiene el valor unique=True . Cuando se ingresa una entrada duplicada, se muestra lo siguiente en el sitio web This value user_input already exists in the database aunque no lo configuré. Esta puede ser una característica de form.is_valid() ?
Por lo tanto, reconoce inmediatamente los valores duplicados, pero estoy tratando de configurarlo para que, si se ingresa un valor duplicado, solo lleve al usuario a la associated_url para ese valor.
es decir
Tabla de base de datos existente:
user_input associated_url hello https://stackoverflow.com Si un usuario volviera a ingresar hello en el formulario, lo llevaría inmediatamente a https://stackoverflow.com en lugar de mostrar This value user_input already exists in the database
Código:
def Primary(request): form = Form() if request.method == 'POST': form = Form(request.POST) if form.is_valid(): ... saving to database, redirect etc. Necesito poder verificar si el valor de entrada es un duplicado. Si es así, obtenga la user_input associated_url de la misma fila que la entrada duplicada de entrada de usuario y redirija al usuario allí.
Para hacer esto yo mismo, intenté agregar una declaración else a la condición form.is_valid , pero eso parece una mala práctica porque intentará redirigir independientemente del error (?) Y porque no sé cómo associated_url la URL asociada con el valor de entrada.
Tiene múltiples opciones para esto, pero algunas de ellas lo son.
param = request.POST["param"] if YourModel.objects.get(param=param): redirect('/myurl/{}'.format(param)) else: if form.is_valid(): # other code O escriba su propio método clean() personalizado para el formulario que está utilizando.