0

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/')
4

1 に答える 1