Alter Django Form

Aug 19 2020

Wie kann ich meinen Code so anpassen, dass ein Benutzer keinen anderen Benutzer für einen neuen Beitrag auswählen kann? Ich möchte es so machen, dass der angemeldete Benutzer automatisch als Autor hinzugefügt wird.

Ich habe versucht, den Feldteil in views.py nur auf das Inhaltsfeld zu setzen, aber es funktioniert nicht

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>

Antworten

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

Sie können manuell legen Sie den Benutzer Wert mit request.user.usernameeinem Blick auf (oder) diese . Die Antwort des Fragestellers befindet sich unten.

AbhishekBera Aug 19 2020 at 00:37

Es gibt 3 Dinge, die Sie tun müssen:

  1. Schützen Sie die Seite, damit anonyme Benutzer nicht darauf zugreifen können LoginRequiredMixin
  2. Entfernen Sie den Benutzer aus den Feldern
  3. Geben Sie den aktuellen Benutzer in das übermittelte Formular ein, nachdem das Formular mithilfe der form_validMethode gesendet wurde
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)