2010-10-07 3 views
1

Я все еще придерживаюсь встроенного Tree-like-eidited связанных моделей на одной странице. У меня есть три модели, A, B и C.Django: встроенное редактирование родственной модели с использованием inlineformset

Class A 

Class B 
    fb = foreignkey(A) 

Class C 
    fc = foreignkey(B) 

В admin.py я делаю что-то вроде

AdminA 
    inlines = [inlineB] 

AdminB 
    inlines = [inlineC] 

Я хочу, чтобы, когда я изменить/добавить модель A, I должен иметь возможность добавить ModelB inline и добавить связанные с Model B записи C. Я тестировал inlineformsets, но не могу узнать, как использовать их для моей цели. Более того, я нашел this old discussion on same problem. Но опять же, поскольку я новичок в Django, я не знаю, как заставить его работать.

+0

_What вы на самом деле пытаются до сих пор? _ Вы сделали соответствующий вопрос 12 часов назад , в котором вы сказали, что модель B определяет просто связь между A и C. Я когда-то имел аналогичную настройку с моделями от django-tagging и в основном работал с помощью «GenericInlineAdminForm» для «TaggedItem», который также в основном определяет отношения между тегами, помеченные объекты и типы содержимого. Однако вы не можете рассчитывать на получение полезного ответа здесь, если указать только довольно абстрактные вопросы. –

+0

12 часов назад, да B был абстрактным классом. Но не более того, я внес некоторые изменения в класс. Раньше я надеялся найти какое-то встроенное решение, например всплывающее окно, которое появляется, если вы хотите создать объект foreginkey. Теперь я пытаюсь создать структуру inlineformset. Поэтому в строке Inline я надеюсь, что помимо полей B, я могу добавить экземпляры объектов класса C. Поэтому вы ищете индивидуальное решение для форм, используя модели, встроенные формы и т. Д. Infact моя проблема в точности такая же, как и в ссылке, о которой я упоминал. Можете ли вы наполнить меня деталями своего решения? – Neo

+1

Пожалуйста, ознакомьтесь с http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#inlinemodeladmin-objects. Если вы определяете InlineAdminForm для модели B, например. полученный от admin.TabularInline, вы должны получить дисплей формы, который предоставляет кнопки ** + ** -, которые должны позволить вам создавать экземпляры C во всплывающем окне. Если это не работает, проверьте внешние ключи. Вопрос, с которым вы связаны, в основном имеет разумные ответы на вашу проблему. –

ответ

2

Его немного странно, отвечая на ваш собственный вопрос, но никто больше не подошел. И благодаря Бернду за то, что он указал мне в правильном направлении. Это решение потребовало создания промежуточной модели. Класс BC в моем случае.

И вместо того, чтобы иметь InlineB в Admin модели A, используйте встроенный BC. Так выглядит полный admin.py.

class InlineC(admin.TabularInline): 
    model = C 
    extra = 1 

class BCInline(admin.TabularInline): 
    model = BC 
    extra = 1 

class AdminA(admin.ModelAdmin): 
    fieldsets = [ 
     (None, { 
      'fields': ('a',) 
      }), 
     ] 
    inlines = [BCInline] 

class AdminB(admin.ModelAdmin): 
    fieldsets = [ 
     (None, { 
      'fields': ('b',) 
      }), 
     ] 
    inlines = [InlineC] 

И вуаля, я получаю кнопку для popus, чтобы создать полный объект B, на надстройке странице модели А.

+1

Что такое объект IntegerFields в моделях B и C? – antihero

+0

Действительно ли это всплывающее окно? Я так не думаю. – andi

Смежные вопросы