Modifier le formulaire Django
Aug 19 2020
Comment puis-je ajuster mon code afin qu'un utilisateur ne puisse pas choisir un autre utilisateur pour un nouveau message. Je veux faire en sorte que l'utilisateur connecté soit automatiquement ajouté en tant qu'auteur.
J'ai essayé de définir la partie des champs dans views.py uniquement sur le champ de contenu, mais cela ne fonctionne pas
models.py
class post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.CharField(max_length=140)
views.py
class CreatePostView(CreateView):
model = post
fields = '__all__'
template_name = 'users/create.html'
Myform.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Login">
</form>
Réponses
1 bkrop Aug 18 2020 at 23:50
class CreatePostView(CreateView):
model = post
template_name = 'users/create.html'
fields = ['content']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
MukheemMohammed Aug 18 2020 at 23:51
Vous pouvez insérer manuellement la valeur utilisateur en utilisant request.user.username
(ou) Regardez ceci . La réponse de l'interrogateur se trouve en bas.
AbhishekBera Aug 19 2020 at 00:37
Vous devez faire 3 choses:
- Protégez la page afin que les utilisateurs anonymes ne puissent pas y accéder, en utilisant
LoginRequiredMixin
- Supprimer l'utilisateur des champs
- Entrez l'utilisateur actuel dans le formulaire soumis après la publication du formulaire, en utilisant la
form_valid
méthode
from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
class CreatePostView(LoginRequiredMixin, CreateView):
model = Post
fields = ["content"]
template_name = "create.html"
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)