Zmień formularz Django
Aug 19 2020
Jak mogę dostosować swój kod, aby użytkownik nie mógł wybrać innego użytkownika do nowego posta. Chcę, aby zalogowany użytkownik był automatycznie dodawany jako autor.
Próbowałem ustawić część pól w views.py tylko na pole zawartości, ale to nie działa
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>
Odpowiedzi
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
Możesz ręcznie wstawić wartość użytkownika za pomocą request.user.username(lub). Spójrz na to . Odpowiedź pytającego znajduje się na dole.
AbhishekBera Aug 19 2020 at 00:37
Musisz zrobić 3 rzeczy:
- Chroń stronę, aby anonimowi użytkownicy nie mieli do niej dostępu, używając
LoginRequiredMixin - Usuń użytkownika z pól
- Wprowadź aktualnego użytkownika w przesłanym formularzu po wysłaniu formularza, używając
form_validmetody
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)