Как настроить встроенную модель «многие ко многим» в админке django - PullRequest
6 голосов
/ 24 мая 2010

Я использую интерфейс администратора для просмотра счетов и продуктов.Чтобы упростить задачу, я установил продукты как встроенные в счета, так что я увижу соответствующие продукты в форме счета.Как вы можете видеть, я использую отношение многие ко многим.

В 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)

В admin.py:

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

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

Проблема в том, что django представляет продукты в виде таблицы выпадающих меню (по одному на каждый связанный продукт).Каждый выпадающий список содержит все перечисленные продукты.Поэтому, если у меня 5000 продуктов и 300 связаны с определенным счетом, django фактически загружает 300x5000 наименований продуктов.Кроме того, таблица не эстетична.

Мне не нужно обновлять продукты через форму счета.Как я могу изменить его, чтобы оно отображало название продукта во встроенной таблице?Какую форму мне переопределить и как?

1 Ответ

4 голосов
/ 24 мая 2010

Я думаю, что это просто, не используйте inline, просто используйте свойство ModelAdmin.filter_hor horizontal

...