Comment puis-je utiliser UpdateView?
J'en ai deux, probablement, des problèmes avec UpdateView. Tout d'abord, il n'est pas la mise à jour de l'utilisateur, mais la création d'un nouvel objet utilisateur. Deuxièmement, je ne peut pas restreindre les champs affichés dans le formulaire.
Voici mon views.py:
class RegistrationView(FormView):
form_class = RegistrationForm
template_name = "register.html"
success_url = "/accounts/profile/"
def form_valid(self, form):
if form.is_valid:
user = form.save()
user = authenticate(username=user.username, password=form.cleaned_data['password1'])
login(self.request, user)
return super(RegistrationView, self).form_valid(form) #I still have no idea what this is
class UserUpdate(UpdateView):
model = User
form_class = RegistrationForm
fields = ['username', 'first_name']
template_name = "update.html"
success_url = "/accounts/profile/"
et urls.py
url(r'^create/$', RegistrationView.as_view(), name="create-user"),
url(r'^profile/(?P<pk>\d+)/edit/$', UserUpdate.as_view(), name="user-update"),
Comment puis-je utiliser correctement UpdateView? Merci à l'avance.
Il n'est pas strictement liées, mais vérifiez ceci: lightbird.net/dbe2/index.html et github.com/pennersr/django-allauth
Plusieurs points: une fois que vous appelez la
Plusieurs points: une fois que vous appelez la
form_valid()
méthode, vous n'avez pas besoin de vérifier si le formulaire est valide. Qui est réalisée dans le post()
méthode (voir: ccbv.co.royaume-uni/projets/Django/1.8/django.les vues.génériques.edit/...). La dernière ligne de form_valid()
méthode garantit que nous appelons form_valid()
correctement dans RegistrationView parent (UpdateView).
OriginalL'auteur aled1027 | 2013-08-01
Vous devez vous connecter pour publier un commentaire.
Problème 1.
L'utilisateur n'est pas mis à jour parce que vous êtes en utilisant le même formulaire
(RegistrationForm) pour faire vos mises à jour et de créer de nouveaux utilisateurs.
Problème 2. Les formes appartiennent à un fichier de leur propre appelé forms.py.
Je suggère de refactoring:
légèrement élégant urls.py
Vous avez laissé beaucoup de l'info, donc pas vraiment sûr de ce que votre installation.Ma solution est basée sur l'hypothèse que vous avez Django 1.5. Vous pouvez en savoir plus sur la gestion des formulaires avec CBVs
Je ne pense pas que c'est correct. En utilisant le même formulaire ne doit avoir aucun effet. Voir ma réponse ci-dessous.
pouvez-vous écrire le code pour mettre à jour les objets en surchargeant la méthode post? J'ai essayé de mise en œuvre de ce par substitution de poste, mais il crée un nouvel objet à la place. Merci
Je ne suis pas trop sûr de comprendre ce que vous demandez, mais si vous créez une nouvelle question et de poster votre code, je serais heureux de vous aider
OriginalL'auteur Staccato
première:
user = form.save()
enregistre dans la base de données du formulaire. car il n'y a pas de pk dans la forme, il en crée une nouvelle.ce que vous avez à faire est probablement de vérifier si un utilisateur avec ce nom d'utilisateur existe et si pas de créer (pour cette partie de vérifier sur google).
deuxième: à restreindre le champ, vous devez les spécifier dans la
Meta
classe de la Forme (qui n'apparaît pas ici) cochez cette https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#modelform.OriginalL'auteur EsseTi
Si vous obtenez de nouveaux objets dans la base de données au lieu de la mise à jour de celles existantes, alors il est probable que vous avez copié et collé le modèle pour les nouveaux objets et j'ai oublié de changer la forme de l'attribut action. Cela devrait point de vue que le fait de la mise à jour soit sous la forme d'un codée en dur le chemin ou l'URL de la balise (
{% url '<name of URLconf>' object.id %
).OriginalL'auteur polarise