Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
如何让下拉选择从Django模型填充模板中的DataTables表?_Django_Django Models_Datatables_Django Forms - Fatal编程技术网

如何让下拉选择从Django模型填充模板中的DataTables表?

如何让下拉选择从Django模型填充模板中的DataTables表?,django,django-models,datatables,django-forms,Django,Django Models,Datatables,Django Forms,希望我能得到一些帮助。我基本上在我的站点上有一个带有表的页面,表是用我的模型从数据库中填充的。我的问题是,我希望有一个下拉列表,用户可以选择他们想要查看的数据。我知道我需要使用django表单来完成这项工作,但我一直在搜索,并且一直很难找到我需要做的事情。该表由DataTables和一些BS4样式组成 现在,我的表中只填充了一个模型(Model1),这很好,但我不确定如何从下拉列表中选择,以填充不同的模型。我有点了解表单是如何工作的,但我不确定如何按照我的意愿实现它们。我看到的很多东西只是展示了

希望我能得到一些帮助。我基本上在我的站点上有一个带有表的页面,表是用我的模型从数据库中填充的。我的问题是,我希望有一个下拉列表,用户可以选择他们想要查看的数据。我知道我需要使用django表单来完成这项工作,但我一直在搜索,并且一直很难找到我需要做的事情。该表由DataTables和一些BS4样式组成

现在,我的表中只填充了一个模型(Model1),这很好,但我不确定如何从下拉列表中选择,以填充不同的模型。我有点了解表单是如何工作的,但我不确定如何按照我的意愿实现它们。我看到的很多东西只是展示了如何用一个模型制作表单

任何类型的示例或指导都将不胜感激:)

这是我的模型.py:

    class Model1(models.Model):

            date = models.DateTimeField(db_column='Date', primary_key=True, default='', max_length=40) 
            data1 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data1',)
            data2 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data2',)
            class Meta:
                    managed = True
                    db_table = 'table1'
            def __str__(self):
            return '%s %s %s' % (str(self.date), self.data1, self.data2,)

    class Model2(models.Model):

            date = models.DateTimeField(db_column='Date', primary_key=True, default='', max_length=40) 
            data1 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data1',)
            data2 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data2',)
            class Meta:
                    managed = True
                    db_table = 'table2'
            def __str__(self):
            return '%s %s %s' % (str(self.date), self.data1, self.data2,)

    class Model3(models.Model):

            date = models.DateTimeField(db_column='Date', primary_key=True, default='', max_length=40) 
            data1 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data1',)
            data2 = models.CharField(max_length=40, default='NoData', blank=True, null=True, db_column='data2',)
            class Meta:
                    managed = True
                    db_table = 'table3'
            def __str__(self):
            return '%s %s %s' % (str(self.date), self.data1, self.data2,)
以下是我的观点.py:

from app.models import Model1, Model2, Model3
from django.shortcuts import render

def Appview(request):
    template_name = 'app/app.html'

    Model1 = Model1.objects.all()
    Model2 = Model2.objects.all()
    Model3 = Model3.objects.all()
    return render(request, template_name, {'Model1': Model1})
以下是我的(简化)app.html:

<div class="table-responsive container">
      <table id = "table" class = "table table-sm table-hover" width="100%">
        <thead>
            <tr>
                <th>Date</th>
                <th>Data1</th>
                <th>Data2</th>
            </tr>
        </thead>

        <tbody>
            {% for data in Model1 %}
            <tr>
                <td>{{ data.date }}</td> 
                <td>{{ data.data1 }}</td>
                <td>{{ data.data2 }}</td>    
            </tr>
            {% endfor %}
        </tbody>
    </table>

日期
数据1
数据2
{模型1%中的数据为%1}
{{data.date}
{{data.data1}}
{{data.data2}}
{%endfor%}
问题的核心是:如何制作一个下拉表单,用不同的模型重新填充视图/模板


编辑:模型有更多的字段,表格比显示的要大得多。为了简单起见,我只是精简了一下。再深入一点,我想我可能需要使用AJAX

您没有包括您的表单,但它可以很简单:

class DataForm(forms.Form):
    model = forms.CharField()
然后将表单放在模板中的某个位置:

<form method="get">
    {{ form.as_p }}
    <input type="submit">
</form>

我没有包括验证(您希望确保
模型
存在),但它只是给您一个想法。如果你不想要一个默认的模型,逻辑可能会更复杂。

哇,真的那么简单吗?我要试一试!我得到了它!我用了一个精选的场地,得到了我的下拉列表。我更希望它只更新表本身,而不是重新加载整个页面,但现在它工作得很顺利。改天我会去拿阿贾克斯的蠕虫罐头,哈哈。太好了!是的,当然,
ChoiceField
要好得多,AJAX会让它更流畅。
def Appview(request):
    models = {
        'model1': Model1,
        'model2': Model2,
        'model3': Model3,
    }    
    template_name = 'app/app.html'
    data = Model1.objects.all()

    if 'model' in request.GET:
        form = DataForm(request.GET)
        if form.is_valid()
            model = form.cleaned_data['model']
            model = models[model]
            data = model.objects.all()
    else:
        form = DataForm()
    return render(request, template_name, {'data': data, 'form': form})