Как ограничить выбор региона на основе значения страны?

Я установил django-cities-light и django-autocomplete-light. Все шло хорошо, пока я не попытался запретить пользователю выбирать Брюссель в качестве региона, если он ввел Францию ​​в качестве страны.

Я следил за учебником здесь: http://django-autocomplete-light.readthedocs.org/en/v2/dependant.html, но я как-то упустил важную деталь.

Приложение автозаполнения работает нормально, но ограничений нет. Поскольку я не знаю, каким должен быть носитель класса, я предполагаю, что проблема может заключаться в этом. Более того, в документах говорится, что он используется для загрузки некоторого дополнительного кода javascript, и, похоже, он не загружается, поскольку приложение работает нормально.

Вот мои модели.py

from django.db import models
from user.models import User
from cities_light.models import City, Country, Region

class Offer(models.Model):
    publisher = models.ForeignKey(User)
    content = models.TextField()
    date = models.DateTimeField(auto_now_add=True, auto_now=False)

    country = models.ForeignKey(Country)
    region = models.ForeignKey(Region)
    city = models.ForeignKey(City)

autocomplete_light_registry.py

import autocomplete_light
from offers.models import Offer
from cities_light.models import Country, Region, City

class CountryAutocomplete(autocomplete_light.AutocompleteModelBase):
    attrs={'placeholder': 'Choisissez votre Pays'}
    search_fields=('search_names', 'alternate_names',)

    def choices_for_request(self):
        q = self.request.GET.get('q', '')
        country_id = self.request.GET.get('country_id', None)

        choices = self.choices.all()
        if q:
            choices = choices.filter(name_ascii__icontains=q)
        if country_id:
            choices = choices.filter(country_id=country_id)

        return self.order_choices(choices)[0:self.limit_choices]

autocomplete_light.register(Country, CountryAutocomplete)

class RegionAutocomplete(autocomplete_light.AutocompleteModelBase):
    attrs={'placeholder': 'region name ..'}
    search_fields=('search_names', 'alternate_names',)

    def choices_for_request(self):
        q = self.request.GET.get('q', '')
        country_id = self.request.GET.get('country_id', None)

        choices = self.choices.all()
        if q:
            choices = choices.filter(name_ascii__icontains=q)
        if country_id:
            choices = choices.filter(country_id=country_id)

        return self.order_choices(choices)[0:self.limit_choices]

autocomplete_light.register(Region, RegionAutocomplete)


class CityAutocomplete(autocomplete_light.AutocompleteModelBase):
    attrs={'placeholder': 'Choisissez votre ville'}
    search_fields=('search_names', 'alternate_names',)

    def choices_for_request(self):
        q = self.request.GET.get('q', '')
        city_id = self.request.GET.get('city_id', None)

        choices = self.choices.all()
        if q:
            choices = choices.filter(name_ascii__icontains=q)
        if city_id:
            choices = choices.filter(country_id=country_id)

        return self.order_choices(choices)[0:self.limit_choices]

autocomplete_light.register(City, CityAutocomplete)

формы.py

from django import forms
from django.contrib import admin
from django.contrib.auth.models import Group
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import ugettext_lazy as _
from django.conf import settings

from offers.models import Offer, LevelChoices, CoursChoices

import autocomplete_light


class SendOfferForm(autocomplete_light.ModelForm):

    class Media:
        js = ('dependant_autocomplete.js',)
    class Meta:
        model = Offer
        autocomplete_fields = ("country", "region", "city")
        fields = ('country', 'region', 'city', 'content')

РЕДАКТИРОВАТЬ

Я обнаружил, что если я удалю весь код после поля attrs в autocomplete_light_registry.py, ничего не изменится. Что-то не распознается django. Я проверил свой settings.py, но все в порядке.

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, '/media/')

person Cobblepot    schedule 22.08.2015    source источник


Ответы (1)


  1. добавьте 'autocomplete_light.example_apps.dependant_autocomplete' к вашим установленным приложениям

  2. Доступ к недавно добавленному приложению через интерфейс администратора

  3. Проверьте правильность фильтрации автозаполнения
  4. если да Готово
  5. Если нет, подключите компьютер к Интернету и повторите шаги 2 и 3.
person Damilola Boiyelove    schedule 07.09.2015