django - 我可以在 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>
解决方案
你不必。
在你的 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})
推荐阅读
- javascript - 页面更改时音乐停止 Django
- machine-learning - 必须使用复杂的还是几个简单的模型?
- javascript - 从部分视图更改元素时未命中 Javascript 函数
- mysql - 如何在sql中返回由另一列分组的多值列
- java - 使用 Spring Security 后 $http 请求给出 403?
- python - Django:多处理中的查询发生 django.db.utils.OperationalError: SSL 错误?
- select - 使用多选选项删除 Bootstrap 选择上的勾号
- java - 如何使用Java将关联数组的HashMap作为参数传递给存储过程
- java - 如何忽略比较器中的空值?
- sql-server - 删除语句历史