widgets tipos personalizados formularios fields ejemplos crear avanzados django django-models django-views

tipos - modelform django



Establecer un campo en un modelo que no usa un formulario (2)

Como otros han dicho, debes guardar. Sin embargo, es el perfil que necesita guardar, no el usuario, ya que es un modelo diferente.

profile = request.user.profile profile.active = True profile.save()

Tengo un sitio que cuando un usuario hace clic en un enlace bootstrap glyphicon, debe redirigirlo a otra página, esta página es del mismo glyphicon pero de color verde para que parezca que al presionar el enlace activaron el botón. Durante esta transición, quiero que el campo active en mi Profile pase de False a True . Tengo el siguiente código:

models.py:

class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) university = models.CharField(max_length=30, blank=True) ROLE = ( (''CUSTOMER'', ''User''), # (value to be set on model, human readable value) (''WORKER'', ''Worker''), ) role = models.CharField(max_length = 20, choices = ROLE, default = ''USER'') active = models.BooleanField(default = False)

views.py

def active(request): request.user.profile.active = True; return render(request, ''core/customer_active.html'', {''user'': request.user})

home.html:

<a href="{% url ''active'' %}"><span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span></href>

No estoy seguro de por qué request.user.profile.active = True; no actualiza el estado del campo, ¿qué será?


¿Es esto un cambio permanente a la propiedad "activa"? Debe guardar el objeto de usuario, si es así. Me gusta esto:

def active(request): request.user.profile.active = True; request.user.save() return render(request, ''core/customer_active.html'', {''user'': request.user})

Editar: puede valer la pena señalar que esta no es la manera más inteligente de actualizar el perfil de un usuario, guardando este atributo cada vez que acierte a esta vista, pero si solo se está preguntando por qué el valor True no persiste, este es el razón por qué.