pro - django tutorial python 3




Définition d'un champ sur un modèle n'utilisant pas de formulaire (2)

J'ai un site qui quand un utilisateur clique sur un lien glyphicon bootstrap ils devraient être redirigés vers une autre page, cette page est du même glyphicon mais dans une couleur verte pour faire croire que si en appuyant sur le lien ils ont activé le bouton. Pendant cette transition, je veux que le champ active sur mon Profile passe de False à True . J'ai le code suivant:

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>

Je ne suis pas sûr pourquoi request.user.profile.active = True; ne met pas à jour l'état du terrain, que va-t-il faire?


Comme d'autres l'ont dit, vous devez économiser. Cependant, c'est le profil que vous devez sauvegarder, pas l'utilisateur, puisqu'il s'agit d'un modèle distinct.

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

Est-ce un changement permanent à la propriété "active"? Vous devez enregistrer l'objet utilisateur, si c'est le cas. Comme ça:

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

Edit: peut être utile de noter que ce n'est pas la manière la plus intelligente de mettre à jour le profil d'un utilisateur, en sauvegardant cet attribut chaque fois qu'il touche cette vue, mais si vous vous demandez pourquoi la valeur True ne persiste pas, c'est le pourquoi?