python - Django ModelForm 未显示在模板中
问题描述
我正在尝试创建一个表单,使用户能够在产品缺货时通过引导模式输入他的电子邮件。
但是,表单{{ form.as_p }}未显示在模板上(见下图)。
此外,我不确定如何传入 Product.id 和 Product.name 以便在用户单击提交时在 Django Admin 端将其与电子邮件一起显示?
模型.py
class ReminderEmail(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
date_added = models.DateTimeField(auto_now_add=True)
remindemail = models.CharField(max_length=200, null=True)
def __str__(self):
return self.email
表格.py
from django import forms
from .models import ReminderEmail
class EmailForm(forms.ModelForm):
class Meta:
model = ReminderEmail
fields = [
'remindemail'
]
视图.py
from django.shortcuts import render
from django.http import JsonResponse
import json
import datetime
from .models import *
from .forms import *
def email_remind_view(request):
form = EmailForm(request.POST or None)
if form.is_valid():
form.save()
context = {
'form' : form
}
return render(request, "store.html", context)
商店.html
<div id="stockModal" class="modal fade" role="dialog">
<div class="modal-dialog modal-dialog-centered">
<!-- Modal content-->
<div class="modal-content">
<form>
<div id="modalheader" class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">This product is Out of Stock</h5>
</div>
<div id="modalbody" class="modal-body">
<p>Enter your email to be reminded whenever this product goes back in stock.</p>
</div>
<div class="modal-footer">
<!-- <input required class="form-control" type="text" name="name" placeholder="Name.."> -->
{{ form.as_p }}
<input id="submitEmail" class="btn btn-success btn-block" type="submit" value="Submit Email">
</div>
</form>
</div>
</div>
</div>
<div class="row">
{% for product in products %}
<div class="col-lg-4">
<img class="thumbnail" src="{{product.image.url}}">
<div class="box-element product">
<h6><strong>{{product.name}}</strong></h6>
<h7>{{product.quantity}} left</h7>
<!-- <h7 class="hidden" id="out-of-stock">Notify When Available</h7> -->
<div id="content"></div>
<hr>
<button id="ATC" data-product={{product.id}} data-action="add"
class="btn btn-outline-secondary add-btn update-cart">Add to Cart</button>
<button id="Remind" data-product={{product.id}} class="btn btn-outline-secondary add-btn hidden">Notify Me
When
Available</button>
<!-- <a class="btn btn-outline-success" href="#">View</a> -->
<h4 id="price" style="display: inline-block; float: right">${{product.price|floatformat:2}}</h4>
</div>
</div>
{% endfor %}
</div>
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.store, name="store"),
path('cart/', views.cart, name="cart"),
path('checkout/', views.checkout, name="checkout"),
path('update_item/', views.updateItem, name="update_item"),
path('process_order/', views.processOrder, name="process_order"),
path('email/', views.email_remind_view, name="email_remind_view"),
]
store.html 中的测试代码
<form method="POST"></form>
{% csrf_token %}
{{ form.as_p }}
<input id="submitEmail" type="submit" value="Submit Email">
</form>
任何帮助表示赞赏!
解决方案
- 在您的
forms.py
中,您缺少 importmodels
:
from .models import models, ReminderEmail
- 如果您想通过
Product.id
并且Product.name
需要在您的中声明它们并将它们forms.py
隐藏在您的 html 模板中:
from django import forms
class EmailForm(forms.ModelForm):
class Meta:
model = ReminderEmail
fields = ('remindemail', 'product',)
widgets = {
'product': forms.HiddenInput()
}
推荐阅读
- css - vue组件上的内联css
- javascript - ECMAScript 6 是否支持 ECMAScript 5 的所有语言特性?ES6 是 ES5 的超集吗?
- python - 如何将卷积层的输出显示为图像?
- apache-spark - 在 Spark 中使用 from_avro 函数从 Kafka avro 格式反序列化结构无法正常工作
- c - 以时尚的方式并排字符矩阵
- amazon-s3 - Amazon Web Services 实际存储过程
- cython - 如何编写 cython 扩展类型的 C++ 构造函数?
- python - 加快从 netcdf 插入点数据
- r - 合并两个基于时间范围和唯一 ID 的数据帧
- javascript - 功能道具是否需要“noop”[lodash] 默认参数?