简短的问题:如何将用户输入的表单信息传递给方法类的参数?
用户键入一个数字,该数字用于方法中以乘以“类别”字段中的另一个值。
我尝试了很多事情,但无法弄清楚我做错了什么 如果我更新方法以使用常量而不是变量,那么一切都会在模板上呈现出我想要的样子
我一直遇到缺少位置参数错误的情况。
型号
class Product(models.Model):
sku = models.CharField(max_length=30)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.sku
def multi(self, n = 2): #setting up a default of 2 initiate
np = self.price * n #the method and show self.multi in template
return np
观看次数
def index(request):
list = Product.objects.all()
if request.method == "POST":
form = Input(request.POST or None)
if form.is_valid():
value = request.POST.get('data')
value = form.cleaned_data.get('data')
x = Product.multi() # code broken, it does not
x(value) # initialize the method
else:
form = Input(request.POST or None)
表格
class Input(forms.Form):
data = forms.DecimalField()
template:周围的东西
{% for item in list %}
<div>
{{ item.sku }} {{ item.price }} {{ item.multi }} </div>
{% endfor %}
答案 0 :(得分:0)
我相信您可以尝试通过模板标签和过滤器来实现。 由于默认情况下您无法通过Django模板系统将参数发送到类实例的方法中,因此您需要使用模板标签来发挥创意。 https://docs.djangoproject.com/en/2.2/howto/custom-template-tags/
我将执行以下操作:
# tags.py
from django import template
register = template.Library()
@register.filter
def multi(product, multiple):
return product.multi(multiple)
您认为
def index(request):
list = Product.objects.all()
value = 2 # some default you want
form = Input(request.POST or None)
if request.method == "POST":
if form.is_valid():
value = form.cleaned_data.get('data')
return render(request, 'template.html', {'value': value, 'form': form, 'list': list})
在您的模板中
{% load tags %}
{% for item in list %}
<div>{{ item.sku }} {{ item.price }} {{ item|multi:value }} </div>
{% endfor %}
value
是在表单上输入的值,您可以将其输入到呈现的模板页面的上下文中
希望有帮助