首页 > 解决方案 > 我可以在 django 中的 HTML 中添加表单吗

问题描述

我想从具有单独视图和模型的特定 html 中添加评论,我不想创建一个新的 form.html 只是为了显示表单及其视图。但我被困住了。我可以从管理页面手动添加评论,它工作正常,但似乎我必须创建另一个 url 和 html 文件来显示评论表单并让用户能够添加评论(顺便说一句,我正在尝试构建一个体育相关网站)。提前致谢!

我的模型.py:

class Transfernews(models.Model):
    player_name = models.CharField(max_length=255)
    player_image = models.CharField(max_length=2083)
    player_description = models.CharField(max_length=3000)
    date_posted = models.DateTimeField(default=timezone.now)

class Comment(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    transfernews = models.ForeignKey(Transfernews, related_name="comments", on_delete=models.CASCADE)
    body = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s - %s' % (self.transfernews.player_name, self.user.username)

我的 forms.py :

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ('body',)

我的意见.py:

def addcomment(request):
    model = Comment
    form_class = CommentForm
    template_name = 'transfernews.html'

我的 urls.py:

path('comment/', views.addcomment, name='comment'),

我的 transfernews.html:

<h2>Comments...</h2>

{% if not transfernew.comments.all %}
No comments Yet...
{% else %}
{% for comment in transfernew.comments.all %}
  <strong>
    {{ comment.user.username }} - {{ comment.date_added }}
  </strong>
  <br/>
  {{ comment.body }}
  <br/><br/>
  {% endfor %}
  {% endif %}
  <hr>
  <div>Comment and let us know your thoughts</div>
  <form method="POST">
    {% csrf_token %}
    <div class="bg-alert p-2">
    <div class="d-flex flex-row align-items-start"><textarea class="form-control ml-1 shadow-none textarea"></textarea></div>
    <div class="mt-2 text-right"><button class="btn btn-primary btn-sm shadow-none" type="submit"> <a href="{% url 'comment' %}"></a>
    Post comment</button><button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button></div>
    </div>
  </div>
  </form>

标签: djangodjango-viewsdjango-forms

解决方案


你不必。

在你的 HTML 中,取出锚标签,你只需要提交按钮。

<form method="POST">
{% csrf_token %}
<div class="bg-alert p-2">
<div class="d-flex flex-row align-items-start">{{ form.body }}</div>
<div class="mt-2 text-right"><button class="btn btn-primary btn-sm shadow-none" type="submit">
Post comment</button><button class="btn btn-outline-primary btn-sm ml-1 shadow-none" type="button">Cancel</button></div>
</div>

在您的views.py 中,执行此操作。

def view_that_loads_the_page(request, news_id):
    news = Transfernews.objects.get(id=news_id)
    form_class = CommentForm(request.POST or None)
    if form_class.is_valid():
        # save both news and logged in user
        form.instance.transfernews = news
        form.instance.user = request.user

        # save form.
        form_class.save()
        # returns to the same page
        return HttpResponseRedirect(request.path_info)
    return render(request, "your_html.html", {"form" : form_class})
   

推荐阅读