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:

  1. Chroń stronę, aby anonimowi użytkownicy nie mieli do niej dostępu, używając LoginRequiredMixin
  2. Usuń użytkownika z pól
  3. 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)