2012-06-13 2 views
1

У меня проблема с моим полем tabularinline. У меня есть модель, как этотСвязанный внешний вид внешнего ключа не работает во встроенном Django

class Product(models.Model): 
.... 

class Pemesanan(models.Model): 
produks = models.ManyToManyField(Product, verbose_name=u"Kode Produk", through='Foo') 

class Foo(models.Model): 
product = models.ForeignKey(Product) 
... 

класса Foo является промежуточным классом (manytomany поле) с классом Pemesanan и класса продукта. Он имеет поле внешнего ключа для класса Pemesanan. Класс Foo отображается как tabularinline в шаблоне change_form, как это http://upload.ui.ac.id/?a=d&i=845380

Но моя проблема заключается в том, что полевой продукт не отображается как связанное поле поиска, поскольку оно отображается как обычная форма (не встроенная). Это мой Администратор

class FooInline(admin.TabularInline): 
model = Foo 
extra = 0 
allow_add = True 

class PemesananAdmin(admin.ModelAdmin): 
.... 
search_fields = ['produks'] 
raw_id_fields = ('produks',) 
related_lookup_fields = { 
'm2m': ['produks'], 
} 
inlines = [ 
FooInline, 
] 
exclude = ('produks',) 

У меня есть использование автозаполнения, но мне кажется, так трудно реализовать здесь, потому что учебник является неполным. Итак, есть ли способ заставить мои связанные работы искать в моей табличной строке? Большое спасибо: D.

+0

Вы намеревались определить 'Pemesanan' дважды? Я предполагаю, что первая предназначена для «Продукта». –

+0

О, о, я изменил это. Благодарю вас: D. – Lena

ответ

3

Итак, да, я думаю, я просто не понял, что вы просили. Вы просто хотите, чтобы связанное всплывающее окно поиска выбирало продукт в каждом встроенном, а не в поле выбора. Вы уже знаете про raw_id_fields; проблема в том, что вам нужно указать, что на встроенной модели admin, а не на главную родительскую модель администратора.

class FooInline(admin.TabularInline): 
    model = Foo 
    extra = 0 
    allow_add = True 
    raw_id_fields = ('product',) 
+0

Итак, вы имеете в виду, что связанный поиск не будет работать во встроенном режиме, но просто используйте автоматическое выделение и падение? Но что, если у Продукта много данных, возможно, 1.000.000 продуктов? Если это так, это не эффективно? :( – Lena

+0

Возможно, я пропустил ваш вопрос? Если вы просто хотите, чтобы всплывающее окно выглядело как стандартный список изменений вместо поля выбора, вам нужно добавить поле продукта в 'raw_id_fields' на' FooInline'. –

+0

О, боже мой. Удивительно! Ты совершенно прав! Это хит-ответ для меня! Большое спасибо: '). – Lena

0

У меня такая же ситуация, но мои raw_id_fields в admin.TabularInline, проблема с увеличительным кнопки стекла, не отображается, но вход изменен:

# admin 
class ApartmentInline(admin.TabularInline): 
    model = Apartment 
    max_num = 12 
    extra = 1 
    raw_id_fields = ('propaganda',) 

class BuildingAdmin(admin.ModelAdmin): 
    inlines = [ApartmentInline] 

# models 
class Apartment(models.Model): 
    status = models.ForeignKey(Status) 
    building = models.ForeignKey(Building) 
    propaganda = models.ForeignKey(Propaganda) 

Спасибо!

Редактировать:

Решено! Нужен объект в базе данных.