首页 > 解决方案 > django - 如何在详细视图中创建表单

问题描述

我正在使用 Django 创建一个在线辩论应用程序。我使用基于类的列表视图来创建不同pk的主题,一旦我单击主题,它会将我带到其详细信息页面,一旦我进入详细信息页面,我需要两个文本框来输入我的支持点和反对点输入点后,我需要在文本框下方显示点。我已经创建了一个主题列表,但我无法在该特定页面上添加文本框。

这是我的models.py

class DebateModel(models.Model):
    title = RichTextUploadingField(blank=True,null= True)
    body = models.TextField(max_length = 5000 , null=True,blank=True)
    date_published = models.DateTimeField(auto_now_add=True)
    date_update = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.title
     
class ForModel(models.Model):
    DebateModel = models.ForeignKey(DebateModel,related_name="for_point",on_delete=models.CASCADE)
    body = models.TextField(max_length = 5000)
    date_added = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return '%s  %s' % (self.DebateModel.title, self.body)
    
class AgainstModel(models.Model):
    DebateModel = models.ForeignKey(DebateModel,related_name="against_point",on_delete=models.CASCADE)
    body = models.TextField(max_length = 5000)
    date_added = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return '%s  %s' % (self.DebateModel.title, self.body)

这是我的forms.py

class EditFor(forms.ModelForm):
class Meta:
    model = ForModel
    fields = ('body',)
    widgets = {
    'body': forms.Textarea(attrs={'class':'form-control'}),
    }

这是我的意见.py

class HomeView(ListView):
    model = DebateModel
    template_name = "debate/home.html"

class ArticleDetailView(DetailView):
   model = DebateModel
   template_name = "debate/content.html"
   context_object_name = 'debate'

class AddForView(CreateView):
   model = ForModel
   template_name="debate/content.html"
   form_class = EditFor
   def form_valid(self,form):
       form.instance.DebateModel_id = self.kwargs['pk']
       return super().form_valid(form)
       success_url = reverse_lazy('debate/home.html')

这是我的 urls.py

path('',HomeView.as_view(),name = "home"),
path('article/<int:pk>',ArticleDetailView.as_view(),name = "debate-detail"),
path('article/<int:pk>/forpoint',AddForView.as_view(),name="add_For"),

这是我的 content.html

<button onclick="myFunction()">for</button>
<button onclick="myFunction()">against</button>
<form method="post" action="Add_For/">
 {%csrf_token%}
 </form>
 <script>
      function myFunction() {
      var x = document.createElement("TEXTAREA");
      var t = document.createTextNode("enter your for point");
      var y = document.createElement("INPUT");
      y.setAttribute("type", "submit");
      document.body.appendChild(y);
      x.appendChild(t);
      document.body.appendChild(x);
      }
   </script>
 

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


推荐阅读