我有两个类似的模型:
class ScenarioMarket(models.Model):
title = models.CharField(max_length=50, default="")
description = models.TextField(default="")
b = models.IntegerField(default=100)
cost_function = models.IntegerField(default=0)
open = models.BooleanField(default=True)
def __str__(self):
return self.title[:50]
def get_absolute_url(self):
return reverse('market_detail', args=[str(self.id)])
class Scenario(models.Model):
description = models.TextField(default="")
current_price = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
share = models.IntegerField(default=0)
market = models.ForeignKey(
ScenarioMarket,
on_delete=models.CASCADE,
related_name='scenarios',
default=None)
def __str__(self):
return str(self.description)
在我的模板中,我有一个下拉菜单,该菜单循环(描述(在有关方案市场上可用的所有方案,每个选项都将相关场景的pk
视为其值:
<form action="" method="GET" id="scenario-dropdown">
{% csrf_token %}
<select>
{% for description in scenariomarket.scenarios.all %}
<option value="{{ description.id }}">
{{ description }}
</option>
{% endfor %}
</select>
</form>
我想做的是在Ajax调用中的"下拉菜单"中选择所选选项的pk
。我以为我可以这样做:
var scenario_id = document.getElementById("scenario-dropwdown").value
但是在控制台上,我得到了Uncaught TypeError: Cannot read property 'value' of null
,所以显然它不起作用 - 相对于<form>
。
我在做什么错?
您基本上在这里犯了两个错误:
- 您应该将
id=...""
添加到<select>
TAG 不是<form>
tag;和 - 您在
id
中制作了错别字:应该是scenario_dropdown
,scenario-dropwdown
。
您可以将模板修复到:
<form action="" method="GET">
{% csrf_token %}
<select id="scenario-dropdown">
{% for description in scenariomarket.scenarios.all %}
<option value="{{ description.id }}">
{{ description }}
</option>
{% endfor %}
</select>
</form>
和在JavaScript中查询:
var scenario_id = document.getElementById("scenario_dropdown").value