Django: встроенное редактирование связанной модели с использованием inlineformset - PullRequest
1 голос
/ 07 октября 2010

Я все еще застрял с встроенным древовидным обозначением связанных моделей на той же странице. У меня есть три модели, A, B и C.

Class A

Class B
    fb = foreignkey(A)

Class C
    fc = foreignkey(B)

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

AdminA
    inlines = [inlineB]

AdminB
    inlines = [inlineC]

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

1 Ответ

2 голосов
/ 08 октября 2010

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

class A(models.Model):                                        
a = models.IntegerField()                                 


class B(models.Model):                                        
    fb = models.ForeignKey(A)                                 
    b = models.IntegerField()                                 

class C(models.Model):                                        
    fc = models.ForeignKey(B)                                 
    c = models.IntegerField()                                 

class BC(models.Model):                                       
    fc = models.ForeignKey(A)                                 
    fb = models.ForeignKey(B)                                 

И вместо того, чтобы иметь InlineB в Admin модели A, используйте inline 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, на странице добавления модели A.

...