2010-05-23 6 views
6

Sto utilizzando l'interfaccia di amministrazione per visualizzare fatture e prodotti. Per semplificare le cose, ho impostato i prodotti come inline alle fatture, quindi vedrò i prodotti correlati nel modulo della fattura. Come puoi vedere sto usando una relazione molti-a-molti.Come personalizzare un modello in linea many-to-many in django admin

In models.py:

class Product(models.Model): 
    name = models.TextField() 
    price = models.DecimalField(max_digits=10,decimal_places=2) 

class Invoice(models.Model): 
    company = models.ForeignKey(Company) 
    customer = models.ForeignKey(Customer) 
    products = models.ManyToManyField(Product) 

In admin.py:

class ProductInline(admin.StackedInline): 
    model = Invoice.products.through 

class InvoiceAdmin(admin.ModelAdmin): 
    inlines = [FilteredApartmentInline,] 
admin.site.register(Product, ProductAdmin) 

Il problema è che Django presenta i prodotti come una tabella di menu a discesa (uno per prodotto associato). Ogni discesa contiene tutti i prodotti elencati. Quindi, se ho 5000 prodotti e 300 associati a una certa fattura, django carica effettivamente 300x5000 nomi di prodotti. Anche il tavolo non è estetico.

Non ho bisogno che i prodotti siano aggiornabili tramite il modulo di fattura. Come posso cambiarlo in modo che mostri solo il nome del prodotto nella tabella in linea? Quale forma devo sostituire, e come?

+0

In admin.py InvoiceAdmin deve essere inline = [] ProductInline – Timo

risposta

4

penso è semplice, non utilizzare la linea, basta utilizzare la proprietà ModelAdmin.filter_horizontal

+0

che risponde completamente alla mia domanda. Ma ora ho un seguito - questo mostra l'elenco dei nomi dei prodotti - cosa succede se ho bisogno di essere collegamenti ai prodotti in modo da poter collegare dalla fattura ai prodotti? – Jonathan

+0

quando si selezionano i prodotti in Fattura e si salva l'oggetto che collega entrambi gli oggetti – diegueus9

+0

Il collegamento fornito è morto –

Problemi correlati