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:
- Schützen Sie die Seite, damit anonyme Benutzer nicht darauf zugreifen können
LoginRequiredMixin - Entfernen Sie den Benutzer aus den Feldern
- 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)