Django выпадающий не заполнен - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу, чтобы в моем раскрывающемся списке были значения из одной из моих таблиц БД в моем проекте Django, но он остается пустым, и я не могу понять, почему.

Это мой html код моего дома. html страница:

<select name="regions" id="regions">
    {% for item in regions_list %}
    <option val="{{ item.name_reg }}"> {{ item.name_reg }} </option>    
    {% endfor %}
</select>

models.py:

class data_reg(models.Model):
    id = models.AutoField(primary_key=True)
    name_reg = models.TextField(db_column='NAME_REG', blank=True, null=True) 

    class Meta:
        managed = True
        db_table = 'reg'

views.py:

def MyView(request):
    regions_list = RegionChoiceField()

    query_results_dict = {
        'regions_list': regions_list,
    }

    return render(request,'home.html', query_results_dict)

forms.py:

class RegionChoiceField(forms.Form):

    regions = forms.ModelChoiceField(
        queryset=data_immo.objects.values_list("name_reg", flat=True).distinct(),
        empty_label=None
    )

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

при передаче ModelChoiceField в контекст, я думаю, что шаблон должен быть другим.

{% for item in regions_list %}
<option val="{{ item.name_reg }}"> {{ item.name_reg }} </option>    
{% endfor %}

изменить на

{% for item in regions_list %}
{{ item }}
{% endfor %}

или даже проще, просто поместите свою форму в шаблон

{{regions_list}}

Надеюсь, что это работает,

Приветствие Кен

0 голосов
/ 02 марта 2020

Мне удалось заставить это работать и сделал это, избегая использования forms.py. Я просто сгенерировал свою переменную region_list прямо в views.py, и только после этого ее удалось правильно распознать. Вот как это наконец выглядело:

def MyView(request):
    regions_list = data_immo.objects.values_list("name_reg", flat=True).distinct()

    query_results_dict = {
        'regions_list': regions_list,
    }

    return render(request,'home.html', query_results_dict)

Кроме того, я немного изменил свой код html согласно предложению Кена:

<select name="regions" id="regions">
    {% for item in regions_list %}
    <option val="{{ item.name_reg }}"> {{ item}} </option>    
    {% endfor %}
</select>
0 голосов
/ 01 марта 2020

Я только что проверил это, и, похоже, у меня работает. Можете ли вы напечатать запрос в файле forms.py

print(data_immo.objects.values_list("name_reg", flat=True).distinct())

Это покажет набор запросов в вашем терминале:

<QuerySet ['a_value']>

Я считаю, что всегда хорошо печатать на разных уровнях для отладки , быстро и просто.

...