2015-08-25 3 views
4

Предположим, что существует две модели: Автор и Книга. Уверенный достаточно Книга имеет внешний ключ к Автор. Существует представление вида, в котором пользователь дает имя автора и загружает файл со списком книг, которые он имеет.Создание объектов связанных с Propper объектов в модели Django

Итак, я пытаюсь найти лучший способ создать форму. Прямо сейчас у меня есть:

class AddForm(ModelForm): 
    books = FileField() 
    class Meta: 
      model = Author 

    def clean_books(self): 
      return [book.strip() for book in self.cleaned_data['books'].file] 

Проблема заключается в том, где я должен поставить фактическое создание Книги модельных объектов? Похоже, это должно быть в методе save, что-то вроде:

def save(self, commit=True): 
    author = super().save(commit=True) 
    Book.objects.bulk_create([Book(author=author, title=book.title, ...) for book in self.cleaned_data['books']]) 
    return author 

Но это нормально? Меня действительно раздражает аргумент commit. Это полностью игнорируется, и это может путать других, если они поставляют commit=False. Как я могу принять во внимание аргумент commit и не нарушать логику?

ответ

1

Посмотрите на inline formsets. Используя их, вы можете добавить кучу встроенных форм в свою основную форму. Этот formet будет обрабатывать для вас всю обработку данных и сохранение Book экземпляров в базу данных. Это как встроенный администратор django.

+0

К сожалению, я не понимаю, как использовать его в моем конкретном примере. Можете ли вы привести пример, учитывая, что я использую CreateView CBV? – Glueon

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