django-cities-light と django-autocomplete-light をインストールしました。フランスに国として入力した場合、ユーザーがブリュッセルを地域として選択できないようにするまで、すべてがうまくいきました。
http://django-autocomplete-light.readthedocs.org/en/v2/dependant.htmlのチュートリアルに従いましたが、重要な詳細を見逃していました。
オートコンプリート アプリは問題なく動作しますが、制限はありません。クラスメディアがどうあるべきかわからないので、問題がそれである可能性があると思います。
これが私のmodels.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')
編集
autocomplete_light_registry.py の attrs フィールドの後のすべてのコードを削除しても、何も変わらないことがわかりました。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/')