Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (Django)更改外键下拉列表后,如何使“选定”选项有效?_Javascript_Django_Django Admin - Fatal编程技术网

Javascript (Django)更改外键下拉列表后,如何使“选定”选项有效?

Javascript (Django)更改外键下拉列表后,如何使“选定”选项有效?,javascript,django,django-admin,Javascript,Django,Django Admin,我有一个模型,其字段为日期,外键为另一个模型的文本字段: # models.py class Publications(models.Model): """A class for daily article publications""" date = models.DateField( help_text="date for this article to be published"

我有一个模型,其字段为日期,外键为另一个模型的文本字段:

# models.py
class Publications(models.Model):
    """A class for daily article publications"""

    date = models.DateField(
        help_text="date for this article to be published"
    )
    headline = models.ForeignKey(
        Articles,
        help_text='The article to be published, represented by its headline'
    )
在该模型的管理“添加”页面上,我添加了Javascript,这样当我从日历选择器小部件中选择日期作为日期时,文章FK的下拉选择器将自动限制为当天准备发布的文章的子集。这是通过清除下拉选择器,然后用对后端视图的AJAX调用的结果重新填充它来实现的:

// Javascript for Publications "Add" admin page
// Grab the Article <select> element
let artSelect = document.getElementById("id_headline");

// Clear it
artSelect.innerHTML = '';

// Fill it with new <option> elements from 'data', a list of Article
// headlines retrieved via AJAX
for (var i=0; i<data.length; i++) {
    var opt = document.createElement('option');
    opt.value = i;
    opt.innerHTML = data[i];
    // If it's the first option, make it 'selected'
    if (i == 0) {
        opt.setAttribute("selected", "");
    }
    artSelect.appendChild(opt);
}
如果在选择日期并观看标题下拉列表进行相应过滤后,我选择了过滤后的标题集之一,我可以选择保存,出版物输入日期和文章FK将成功保存到数据库中

我遇到的问题是,如果我在按日期筛选后没有从下拉列表中手动选择文章(例如,如果新的筛选下拉列表中显示的第一个标题是我想要的标题),并且我尝试选择保存,重新加载页面时,会提示“请更正以下错误”,并在“标题”下拉列表上显示“选择有效选项”错误。该选择不是可用的选择之一。该行为对于第一个选项是唯一的,即默认显示的选项;即使我打开下拉列表并手动单击该选项,也会发生这种情况,无论我是否给它“selected”属性,都会发生这种情况。如上所述,如果我打开下拉列表并选择任何其他选项,页面工作正常

我已将错误消息跟踪到django主安装中的django/forms/models.py的ModelChoiceField类。然而,我不确定从这里走到哪里。我不仅不想更改Django本身的文件,而且不知道如何更改。我不知道我可以在自己的应用程序中进行哪些更改以使默认文章选择有效

我可以猜测的一点是,Admin被编程为始终将FK下拉列表中的第一个值作为占位符选项,如--。这是真的吗?有没有办法通过我的应用程序的admin.py中的设置来禁用它?我试着找关于这个的文件,但找不到

否则,在更改下拉列表内容后,如何使外键下拉列表的默认选择成为有效选择


编辑:我决定最好将第一个选项保留为一个无效选项,以指示已完成的过滤,因此这个问题对我来说是没有意义的。然而,我认为根本的问题是Django管理员是否总是将FK下拉列表中的第一个值视为占位符选项,是否有办法禁用它?这是一个好问题,所以我将此问题留待讨论。

您的错误非常微妙:您将第一个选项的值设置为0。外键从1开始。。。因此,选项值0永远不能出现在模型选项中。您可能会发现,选定的文章与标题不符,或者只是偶然


您应该向ajax或具有“id”和“title”的对象提供一个2元组列表,然后创建opt.value=data.id。

我已经通过测试确认了这一点。幸好我没有回答这个问题!