Django-autocompletion-light einfache ausländische Schlüsselvervollständigung zeigt nicht bearbeitbares Dropdown-Widget

Ich habe ein Modell für Länder:

class Country(models.Model): name = models.CharField(max_length=200) def __str__(self): return self.name 

Das wird von einem Fremdschlüssel im UserDetails-Modell verwiesen:

  • Django Form macht nicht
  • Modell hat kein Attribut _committed
  • Verboten (CSRF-Token fehlt oder falsch) Django-Fehler
  • Models.py bekommen riesig, was ist der beste Weg, um es zu brechen?
  • Beschleunigung der Django-Prüfung
  • Django Rest Framework: Holen Sie sich alle Daten in Beziehung
  •   class UserDetails(models.Model): ... country = models.ForeignKey(Country,verbose_name='Country',null=True, blank=True, default = None) 

    Durch die Verwendung von django-autocomplete-light würde ich leuchten, dass beim Einfügen des Landes habe ich ein Text-Widget, das beim Schreiben der ersten Buchstaben abschließt.

    So habe ich vorbereitet:

      class CountryAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): qs = Country.objects.all() if self.q: qs = qs.filter(name__istartswith=self.q) return qs 

    Mit urls.py:

      app_name='shared' urlpatterns = [ url( r'^country-autocomplete/$', CountryAutocomplete.as_view(), name='country-autocomplete', ), ] 

    Und für das Formular UserDetails:

      class UserDetailsForm(forms.ModelForm): country = forms.ModelChoiceField( queryset=Country.objects.all(), widget=autocomplete.ModelSelect2(url='shared:country-autocomplete') ) class Meta: model = UserDetails fields = [...,"country"] 

    Als Vorlage habe ich benutzt:

     {% load static %} {% block content %} <form method="post" action="."> {% csrf_token %} {{ user_form.as_p }} {{ user_details_form.as_p }} <input type="submit" value="Submit" /> </form> {% endblock %} {% block footer %} <script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script> <link rel="stylesheet" type="text/css" href="{% static 'autocomplete_light/select2.css' %}" /> <script type="text/javascript" src="{% static 'autocomplete_light/jquery.init.js' %}"></script> <script type="text/javascript" src="{% static 'autocomplete_light/autocomplete.init.js' %}"></script> <script type="text/javascript" src="{% static 'autocomplete_light/select2.js' %}"></script> <script type="text/javascript" src="{% static 'autocomplete_light/vendor/select2/dist/css/select2.css' %}"></script> <script type="text/javascript" src="{% static 'autocomplete_light/vendor/select2/dist/js/select2.full.js' %}"></script> <script type="text/javascript" src="{% static 'autocomplete_light/forward.js' %}"></script> <script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script> {{ form.media }} {% endblock %} 

    Ich habe alle statischen Dateien in einem Ordner namens 'statisch' in der Wurzel des Projekts kopiert, und ich habe STATIC_URL = '/ static /' in den Site-Einstellungen gesetzt. Beim Ausführen des Aufrufs gibt die runserver-Protokollierung für die statischen Dateien:

     [23/Oct/2016 17:44:59] "GET /accounts/register/ HTTP/1.1" 200 2344 [23/Oct/2016 17:44:59] "GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/autocomplete.init.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/select2.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/select2.css HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/jquery.init.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/vendor/select2/dist/css/select2.css HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/vendor/select2/dist/js/select2.full.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/autocomplete_light/forward.js HTTP/1.1" 304 0 [23/Oct/2016 17:44:59] "GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1" 304 0 

    Wenn ich sende, bekomme ich direkt zur Autovervollständigung, bekomme ich als Ergebnis, was ich erwarte:

     http://127.0.0.1:8000/shared/country-autocomplete/?q=u {"pagination": {"more": false}, "results": [{"text": "USA", "id": 3}]} 

    Allerdings, wenn ich auf das Anmeldeformular gehe, für das Land Feld, bekomme ich ein solches Widget:

    Country_widget

    Das ist leer und kann nicht bearbeitet werden. Wie kann ich ein Text-Widget haben, das Ländernamen bei der Eingabe von Buchstaben vorschlägt?

    One Solution collect form web for “Django-autocompletion-light einfache ausländische Schlüsselvervollständigung zeigt nicht bearbeitbares Dropdown-Widget”

    Das Problem war, dass ich ein CSS als Javascript-Datei importiert und geändert habe

     <script type="text/javascript" src="{% static 'autocomplete_light/vendor/select2/dist/css/select2.css' %}"></script> 

    nach:

     <link rel="stylesheet" type="text/css" href="{% static 'autocomplete_light/vendor/select2/dist/css/select2.css' %}" /> 

    Die autocompletion arbeitete wie gewünscht

    Python ist die beste Programmiersprache der Welt.