Ich habe ein Objekt mit einer Viele-zu-viele-Beziehung mit einem anderen Objekt.
Im Django Admin führt dies zu einer sehr langen Liste in einer Mehrfachauswahlbox.Filter ManyToMany Box in Django Admin
Ich möchte die ManyToMany-Beziehung filtern, damit ich nur Kategorien abrufen, die in der Stadt verfügbar sind, die der Kunde ausgewählt hat.
Ist das möglich? Muss ich ein Widget dafür erstellen? Und wenn ja - wie kopiere ich das Verhalten aus dem Standard-ManyToMany-Feld, da ich auch die Funktion filter_horizontal möchte.
Das sind meine vereinfachte Modelle:
class City(models.Model):
name = models.CharField(max_length=200)
class Category(models.Model):
name = models.CharField(max_length=200)
available_in = models.ManyToManyField(City)
class Customer(models.Model):
name = models.CharField(max_length=200)
city = models.ForeignKey(City)
categories = models.ManyToManyField(Category)
Ich habe festgestellt, dass nach dem Hinzufügen dieses Codes zu einem Projekt ich habe, dass das ausgewählte Optionsfeld (wäre in Ihrem Beispiel unter "Ausgewählte Kategorien" gewählt) leer ist, auch nach Auswahl einer Option aus dem Feld "Verfügbare Kategorien". Habe ich bei der Umsetzung etwas übersehen? – Silfheed
Weitere Reduktion mit Listenverständnis: self.fields ['categories']. Widget.choices = [(choice.id, choice.name) zur Auswahl in wtf] –
was ist 'cat_id'? – Sevenearths