Soy capaz de actualizar un artículo en Django
Los individuos usuarios de miplicación tienen su Bar Information creado inmediatamente después de crear sus Bares. Quiero permitirles poder actualizar su información de la barra, pero sigue devolviendo el error "Seleccionar una opción válida. Esa elección no es una de las opciones disponibles". No estoy seguro de lo que eso significa y este tipo de error es raro para mí.
vistas. py
def UpdateUserBar(request):
user = request.user.id
user_email = request.user.email
bar = Bar.objects.get(user_id=user)
form = UpdateBar(request.FILES, instance=bar)
if request.method == 'POST':
form = UpdateBar(request.POST, request.FILES, instance=bar)
if form.is_valid():
form.save()
return redirect('/updatebar')
messages.success(request, 'Bar Information Updated successfully')
# else:
# return redirect('/dashboard')
# messages.error(request, 'Only Post method is accepted')
else:
try:
pass
except Exception as e:
messages.error(request, "Unknown error"+ str(e))
return redirect(request.path)
else:
form = UpdateBar(instance=bar)
context = {"form":form, "user_email":user_email, "bar":bar}
return render(request, "dashboard/super/landlord/update_bar.html", context)
Nota: Si uso el segundo código de bloqueo que fue comentado, sólo me redirige al dashboard y no muestra ningún error, así que no soy capaz de conocer la causa del error.
modelos. py
class Bar(models.Model):
bar_status = (
("active", "active"),
("closed", "closed"),
("pending", "pending"),
)
user_id = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
opening_time = models.TimeField()
closing_time = models.TimeField()
status = models.CharField(choices=bar_status, default="pending", max_length=14)
image = models.ImageField(upload_to='images/bars', default='images/bars/default.jpg')
def __str__(self):
return self.name
formas.py
class UpdateBar(ModelForm):
class Meta:
model = Bar
fields = '__all__'
updatebar.html
Pregunta hecha hace 3 años, 5 meses, 0 días - Por bughunterx
3 Respuestas:
-
"Seleccione una opción válida. Esa elección no es una de las opciones disponibles." generalmente significa que un campo que tiene
choices
no se ha presentado correctamente con una de las opciones disponibles. En este caso, significa que algo está mal con elstatus
, ya que este es el único campo que utilizachoices
.Note que en
class Bar
Estás definiendostatus
dos veces; la segunda vez sobreescribirá la primera. No estoy seguro de que esto tenga que ver con el problema, pero es va a crear problemas en algún momento.Respondida el Dec 16, 2020 a las 09:17 - por devguru123
Votos positivos: 0 | Votos negativos: 0 -
El error "Seleccionar una opción válida" suele ocurrir cuando el formulario incluye una lista desplegable (select input) con opciones predefinidas, y al enviar el formulario se envía una opción que no está en la lista de opciones válidas.
En tu caso, el campo 'status' en el modelo Bar tiene opciones predefinidas con el campo choices. Sin embargo, en el formulario updatebar.html no estás mostrando esas opciones en una lista desplegable, sino como un campo de texto normal. Por eso al enviar el formulario sin una opción válida, Django muestra el error.
Para solucionar esto, puedes modificar el campo 'status' en el formulario updatebar.html para que se muestre como una lista desplegable con las opciones válidas. Puedes hacerlo de la siguiente manera:
html
{{ form.status }}Con este cambio, el campo 'status' se mostrará como un select input, y se deberá seleccionar una de las opciones predefinidas en el modelo Bar al actualizar la información de la barra. De esta manera, el error "Seleccionar una opción válida" debería solucionarse.
Respondida el Dec 17, 2020 a las 09:17 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error "Seleccionar una opción válida. Esa elección no es una de las opciones disponibles" generalmente ocurre cuando intentas seleccionar un valor para un campo de opción que no está definido en las opciones disponibles.
En tu caso, el campo
status
en tu modeloBar
tiene opciones definidas como:bar_status = ( ("active", "active"), ("closed", "closed"), ("pending", "pending"), )
Sin embargo, en tu formulario
UpdateBar
, no estás incluyendo estas opciones. Intenta agregar el siguiente código a tu formulario:class UpdateBar(ModelForm): class Meta: model = Bar fields = '__all__' widgets = { 'status': forms.Select(choices=Bar.bar_status) }
Esto agregará un widget
Select
al campostatus
, que mostrará las opciones definidas enBar.bar_status
.Además, en tu plantilla
updatebar.html
, debes asegurarte de que el campostatus
esté configurado correctamente. Parece que tienes varios campos ocultos que establecen valores paraname
yuser_id
, pero no veo un campo oculto parastatus
. Agrega el siguiente campo oculto a tu plantilla:Esto asegurará que el valor actual del campo
status
se establezca como valor predeterminado en el formulario.Una vez que hayas realizado estos cambios, intenta actualizar la información de tu barra nuevamente y verifica si el error persiste.
Respondida el Dec 17, 2020 a las 09:19 - por Gemini
Votos positivos: 0 | Votos negativos: 0