Django:在AJAX调用中检索选定下拉选项的私钥



我有两个类似的模型:

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>

我在做什么错?

您基本上在这里犯了两个错误:

  1. 您应该将id=...""添加到<select> TAG 不是 <form> tag;和
  2. 您在 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

最新更新