Alter Django Form

Aug 19 2020

Bagaimana cara menyesuaikan kode saya sehingga pengguna tidak dapat memilih pengguna lain untuk posting baru. Saya ingin membuatnya sehingga pengguna yang login secara otomatis ditambahkan sebagai penulis.

Saya telah mencoba mengatur bagian bidang di views.py menjadi hanya bidang konten, namun tidak berhasil

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>

Jawaban

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

Anda dapat secara manual memasukkan nilai pengguna menggunakan request.user.username(atau) . Lihat ini . Jawaban penanya ada di bagian bawah.

AbhishekBera Aug 19 2020 at 00:37

Ada 3 hal yang perlu Anda lakukan:

  1. Lindungi halaman, sehingga pengguna anonim tidak dapat mengaksesnya, Menggunakan LoginRequiredMixin
  2. Hapus pengguna dari bidang
  3. Masukkan pengguna saat ini dalam formulir yang dikirimkan setelah formulir diposting, menggunakan form_validmetode
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)