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