2013-09-16 2 views
4

Возможно ли это?Django Multiple Nested inline formsets

Мне нужно сохранить некоторые документы, которые будут восстановлены как json/rest.

A Document имеет много Sections, а раздел имеет заголовок, тело и множество Images.

Есть ли способ, который я могу сделать с этой структурой?

Publication 
|-- Section 
    |-- Image 
    |-- Image 
|-- Section 
    |-- Image 
|-- Section 
    |-- Image 
    |-- Image 
    |-- Image 

Мои модели:

class Publication(models.Model): 
    title = models.CharField(max_length=64) 

class Section(models.Model): 
    publication = models.ForeignKey(Publication) 
    heading = models.CharField(max_length=128) 
    body = models.TextField() 

class Image(models.Model): 
    section = models.ForeignKey(Section) 
    image = models.ImageField(upload_to='images/') 
    caption = models.CharField(max_length=64, blank=True) 
    alt_text = models.CharField(max_length=64) 

Я могу это сделать относительно легко, когда Image связано с Publication, потому что есть только один уровень вложенности.

Когда Image относится к домену Section, я не уверен, как построить форму. Кажется, что нет простого способа сделать это с помощью встроенных форм.

Может ли кто-нибудь помочь?

ответ

6

Это не может быть сделано в vanilla Django. Для этого я использую django-nested-inlines, и он работает очень хорошо.

from django.contrib import admin 
from nested_inlines.admin import NestedModelAdmin, NestedTabularInline 

from my.models import Publication, Section, Image 


class ImageInline(NestedTabularInline): 
    model = Image 


class SectionInline(NestedTabularInline): 
    model = Section 
    inlines = [ImageInline,] 


class PublicationAdmin(NestedModelAdmin): 
    inlines = [SectionInline,] 


admin.site.register(Publication, PublicationAdmin) 
+0

Спасибо, hellsgate. Я проверю это. Моим другим вариантом может быть создание библиотеки 'Image', которая отделена от' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' И затем используйте Javascript-подпрограмму, чтобы связать 'Image'. –

+0

Я добавил простой пример кода, как он будет работать с вложенными строками. Удачи в любом случае – hellsgate

+0

Я думаю, что на прошлой неделе я посмотрел на django-inested-inlines. Дело в том, что я планирую сделать свою собственную форму для этого, а не django-admin. –

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