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:

  1. Protégez la page afin que les utilisateurs anonymes ne puissent pas y accéder, en utilisant LoginRequiredMixin
  2. Supprimer l'utilisateur des champs
  3. Entrez l'utilisateur actuel dans le formulaire soumis après la publication du formulaire, en utilisant la form_validmé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)