Django-admin-Formular - wie Sie dynamisch ändern, wählen Sie Werte
Habe ich diese situation:
Ich habe Modelle, Artikel, Region und Land.
class Item(models.Model):
name = models.CharField(max_length=255)
alias = models.SlugField(unique=True)
country = models.OneToOneField(Country, default=0)
region = models.OneToOneField(Region, default=0, related_name='')
class Region(models.Model):
name = models.CharField(max_length=100)
country = models.ForeignKey(Country, default=0)
class Country(models.Model):
name = models.CharField(max_length=100)
Wenn ich ein Element hinzufügen im admin-Bereich und ich Land auswählen-ich möchte automatisch bauen der region wählen Sie mit Regions
nur von der gewählten Country
.
Ich wissen, wie es in javascript, aber ich weiß nicht, wie es RICHTIG ist, dass in Django.
- Sie müssen die ajax verwenden, um dies zu tun: wenn der Wert aus der ersten wählen Sie ändern (Länder), machen eine ajax-Anforderung für alle Regionen in diesem Land, und filtern Sie die zweite wählen Sie mit diesen Werten.
- Ich weiß, aber ich habe noch eine Frage - wie Ihr zu tun Recht auf Django. Ich kann das einfügen von javascript-code in das template für den admin-Bereich und generieren Sie ein anderes auswählen. $('#select1').change(function () { $ajax({ }) })
- Es gibt einige django-Pakete wie code.google.com/p/django-ajax-filtered-fields und github.com/twidi/django-ajax-select Sie können versuchen, diese
- Auch django-smart-wählt gut Aussehen
- Ich Folgte dem, was beschrieben ist in dieser Frage, aber ich bin mir nicht sicher, ob ich alle notwendigen Schritte: Für die schnelle Auswahl eines Landes aus einer region, muss ich hinzufügen auch einige javascript-code?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie überschreiben die saubere Methode von Ihrem admin-Formular:
Wenn Sie Probleme mit django akzeptieren Sie den Wert, den Sie gewählt, weil er nicht denkt, dass es, sollte es in den ersten Platz, haben die queryset finden Sie zu jedem möglichen Wert, aber dann überschreiben Sie die "Auswahl" - Attribut mit einer leeren Menge. Der zweite Teil wird zu vermeiden, django bauen eine riesige Liste option, die gerade dabei ist, überschrieben werden, indem die dynamische javascript.
Ich weiß, das ist nicht der drop-in-Lage für die admin-Bildschirme, aber ich fand diese Seite während der Suche nach einer ähnlichen Sache für non-admin, so dass ich dachte, ich würde ihm Antworten, auch hier. Hier ist, was ich verwende:
in views.py:
In der html-Datei (jQuery geladen werden muss, auch):
Löste ich das problem nicht mit den vorgeschlagenen Bibliotheken (mit einfachen javascript), es gibt aber ein anderes problem: wenn ich die veränderte Land - wählen Sie die region ändert sich automatisch, aber ich kann nicht speichern Sie eine neue region mit dem Wert (wenn Sie eine andere region aus dem gleichen Land kommen - kein problem), da Fehler Wählen Sie eine gültige Wahl. Diese Wahl ist nicht eine der verfügbaren Optionen.
Modelle sind gleich in der ersten Frage, aber default-Wert für das Modell Land gleich 1.
Mein Erster Weg war Land ändern wählen Sie durch formfield_key Funktion,
aber ich weiß nicht, ist das speichern von Objekten oder Objekte Bearbeiten.
Hier schrieb - der beste Weg ist, die sich durch form
und jetzt habe ich code:
__init__
Methode, wennkwargs['instance']
isnt set und eine exception wirftcountry = 1
wirft einen Fehler in derRegion.objects.fitler(country=country)
code-Zeile b/c-filter erwartet eine Objekt-Instanz nicht ein int. nur zur info, die scheitern könnte