Ho un oggetto con una relazione molti-a-molti con un altro oggetto.
Nell'amministratore di Django questo risulta in un elenco molto lungo in una casella di selezione multipla.Filtra ManyToMany box in Django Admin
Mi piacerebbe filtrare la relazione ManyToMany in modo da recuperare solo le categorie disponibili nella città che il cliente ha selezionato.
È possibile? Dovrò creare un widget per questo? E se è così - come faccio a copiare il comportamento dal campo ManyToMany standard ad esso, dal momento che mi piacerebbe anche la funzione filter_horizontal.
Questi sono i miei modelli semplificati:
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)
Ho notato che dopo aver aggiunto questo codice in un progetto, ho che la casella delle opzioni selezionate (che si trova sotto "Scelte categorie" nel tuo esempio) è vuota anche dopo aver selezionato un'opzione dal campo "Categorie disponibili". Mi sono perso qualcosa nell'attuazione di questo? – Silfheed
Ulteriore riduzione utilizzando la comprensione di lista: self.fields ['categories']. Widget.choices = [(choice.id, choice.name) per la scelta in wtf] –
cosa è 'cat_id'? – Sevenearths