Как настроить встроенную модель «многие ко многим» в админке django

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

В моделях.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. Также стол не эстетичен.

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


person Jonathan    schedule 23.05.2010    source источник
comment
В admin.py InvoiceAdmin он должен быть inlines=[ProductInline]   -  person Timo    schedule 01.05.2014


Ответы (1)


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

person diegueus9    schedule 24.05.2010
comment
Это полностью отвечает на мой вопрос. Но теперь у меня есть продолжение — это показывает список названий продуктов — что, если мне нужно, чтобы это были ссылки на продукты, чтобы я мог ссылаться из счета-фактуры на продукты? - person Jonathan; 24.05.2010
comment
когда вы выбираете продукты в счете-фактуре и сохраняете объект, вы связываете оба объекта - person diegueus9; 25.05.2010
comment
Приведенная ссылка мертва - person Vladimir Kroz; 11.01.2015
comment
@VKroz Я исправил ссылку. Это было для django 1.2 (текущий django, когда задавался вопрос), теперь я поставил ссылку на django 1.7. - person diegueus9; 13.01.2015