1

我是 Django 的新手,并试图熟悉它。

我有两个链接的下拉菜单。我想选择一个国家,然后从那里选择那个国家的城市。

我正在尝试从该网站复制代码:
https ://django-select2.readthedocs.io/en/latest/extra.html#chained-select2

我在 models.py 中有以下模型

from django.db import models

# Create your models here.
class Country(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name


class City(models.Model):
    name = models.CharField(max_length=255)
    country = models.ForeignKey('Country', related_name="cities", on_delete=models.CASCADE)


    def __str__(self):
        return self.name

我的views.py 有以下代码: from django.shortcuts import render from django import forms

from django_select2.forms import ModelSelect2Widget

from .models import Country, City
# Create your views here.

class AddressForm(forms.Form):
    country = forms.ModelChoiceField(
        queryset=Country.objects.all(),
        label=u"Country",
        widget=ModelSelect2Widget(
            model=Country,
            search_fields=['name__icontains'],
        )
    )

    city = forms.ModelChoiceField(
        queryset=City.objects.all(),
        label=u"City",
        widget=ModelSelect2Widget(
            model=City,
            search_fields=['name__icontains'],
            dependent_fields={'country': 'country'},
            max_results=500,
        )
    )

def start(request):
    form = AddressForm()
    return render(request, 'startpagina.html', {'form': form})

我的 HTML 有以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chained</title>
{{ form.media.css }}
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
        integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
        crossorigin="anonymous"></script>


</head>
<body>
<table>
    {{ form }}
</table>
<br>
{{ form.media.js }}
</body>
</html>

我使用以下值填充了我的国家和城市模型:
国家:名称:荷兰
国家:名称:比利时
城市:名称:阿姆斯特丹,国家:荷兰
城市:名称:鹿特丹,国家:荷兰
城市:名称:安特卫普,国家:比利时
城市: 名称:布鲁塞尔,国家:比利时

当我运行我的 django 项目时,我确实得到了 2 个下拉菜单,但不幸的是它们没有链接。这意味着当我选择荷兰时,我不会选择阿姆斯特丹和鹿特丹,但我会选择所有城市。

有人可以告诉我我的代码中缺少什么来链接 2 下拉菜单吗?

4

0 回答 0