Modificar la forma de Django
Aug 19 2020
¿Cómo puedo ajustar mi código para que un usuario no pueda elegir a otro usuario para una nueva publicación? Quiero que el usuario que haya iniciado sesión se agregue automáticamente como autor.
Intenté configurar la parte de campos en views.py solo en el campo de contenido, sin embargo, no funciona
modelos.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>
Respuestas
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
Puede insertar manualmente el valor de usuario usando request.user.username
(o) Eche un vistazo a esto . La respuesta del interrogador se encuentra en la parte inferior.
AbhishekBera Aug 19 2020 at 00:37
Hay 3 cosas que debe hacer:
- Proteja la página para que los usuarios anónimos no puedan acceder a ella.
LoginRequiredMixin
- Eliminar al usuario de los campos
- Ingrese el usuario actual en el formulario enviado después de que se publique el formulario, utilizando el
form_valid
método
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)