在django admin中为外键创建链接列表

在django admin中为外键创建链接列表,django,django-admin,django-autocomplete-light,Django,Django Admin,Django Autocomplete Light,我有一些像这样的链接外键关系: class Continent(models.Model): continent = models.CharField(max_length=30) class Country(models.Model): country = models.CharField(max_length=30) continent = models.ForeignKey(Continent) class City(models.Model): cit

我有一些像这样的链接外键关系:

class Continent(models.Model):
    continent = models.CharField(max_length=30)

class Country(models.Model):
    country = models.CharField(max_length=30)
    continent = models.ForeignKey(Continent)

class City(models.Model):
    city = models.CharField(max_length=30)
    country = models.ForeignKey(Country)

class Person(models.Model):
    name = models.CharField(max_length=30)
    continent = models.ForeignKey(Continent)
    country = models.ForeignKey(Country)
    city = models.ForeignKey(City)
在person admin create new item视图中,我希望根据选择的大陆等更改国家和城市的列表。 我试过了,但我认为这不是为了这个。 我读了一些关于django select2的文章,但我看不到任何支持。 你知道有没有可以帮上忙的套餐吗


更新:我遇到

这表明django智能选择。我试过了。有两个问题: -它要求您修改模型,使其成为红色标志。 -它以类别的形式显示列表,但仍然允许您选择不需要的错误项目。(show_all不适用于GroupedForeignKey)


我有个好主意。因为我想使用django autocomplete light来使用autocompletion,如果我可以添加一个事件处理程序,告诉您何时选择第一个列表,然后修改第二个列表的autocomplete url以传入一个额外的参数,那么整个链将工作。我的问题是,当我更改url(数据自动完成轻url)时,它不会生效。我不知道如何触发它重新加载。

幸运的是,这实际上是

您必须创建自己的表单(如果尚未创建):

更新您的自动完成:

class CountryAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        if not self.request.is_authenticated():
            return Country.objects.none()

        qs = Country.objects.all()

        continent = self.forwarded.get('continent', None)

        if continent:
            qs = qs.filter(continent=continent)

        if self.q:
            qs = qs.filter(country__istartswith=self.q)

        return qs

class CityAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        if not self.request.is_authenticated():
            return City.objects.none()

        qs = City.objects.all()

        country = self.forwarded.get('country', None)

        if country:
            qs = qs.filter(country=country)

        if self.q:
            qs = qs.filter(city__istartswith=self.q)

        return qs
并在ModelAdmin中使用新表单:

class PersonAdmin(admin.ModelAdmin):
    form = PersonForm

你能编辑这篇文章来帮助新手理解哪些代码属于哪个文件吗?已经谢谢你了。:)
class PersonAdmin(admin.ModelAdmin):
    form = PersonForm