แก้ไขแบบฟอร์ม Django

Aug 19 2020

ฉันจะปรับรหัสของฉันเพื่อให้ผู้ใช้ไม่สามารถเลือกผู้ใช้รายอื่นสำหรับโพสต์ใหม่ได้อย่างไร ฉันต้องการทำเพื่อให้ผู้ใช้ที่เข้าสู่ระบบถูกเพิ่มโดยอัตโนมัติเป็นผู้เขียน

ฉันได้ลองตั้งค่าส่วนของฟิลด์ใน views.py ให้เป็นแค่ฟิลด์เนื้อหา แต่มันไม่ได้ผล

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>

คำตอบ

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

คุณสามารถแทรกคุณค่าต่อผู้ใช้โดยใช้request.user.username(หรือ) มีลักษณะที่นี้ คำตอบของผู้ถามอยู่ที่ด้านล่าง

AbhishekBera Aug 19 2020 at 00:37

มี 3 สิ่งที่คุณต้องทำ:

  1. ปกป้องเพจเพื่อให้ผู้ใช้ที่ไม่ระบุชื่อไม่สามารถเข้าถึงได้โดยใช้ LoginRequiredMixin
  2. ลบผู้ใช้ออกจากฟิลด์
  3. ป้อนผู้ใช้ปัจจุบันในแบบฟอร์มที่ส่งหลังจากโพสต์แบบฟอร์มโดยใช้form_validวิธีการ
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)