Форма Джанго на основе нескольких моделей - PullRequest
3 голосов
/ 12 сентября 2011

Если у меня есть две модели в приложении Django, подобные этому:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=100)

Как создать одну форму, которая позволяет одновременно добавлять Author и Book.Если автор существует в системе, я мог бы просто отобразить форму книги и связать ее с автором, но очень часто мне нужно, чтобы мои пользователи могли одновременно создавать книгу и автора.

Как можноЯ делаю это?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Вы можете написать пользовательскую форму, которая будет проверять, существует ли автор в системе, использовать существующую, если нет, создавать новую с предоставленным именем.

class CustomForm(forms.ModelForm):
    author = forms.CharField()

    def save(self, commit=True):
       author, created = Author.objects.get_or_create(name=self.cleaned_data['author'])

       instance = super(CustomForm,self).save(commit=commit)
       instance.author = author
       if commit:
          instance.save()
       return instance

    class Meta:
        model=Book

Не уверен, что этот код работает, но я полагаю, он может объяснить мою идею.

0 голосов
/ 30 декабря 2012

Вы можете создать представление, которое обрабатывает несколько форм - см. http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/ для превосходного примера.

Вы должны убедиться, что рендеринг объектов формы выполняется в шаблоне с помощьютолько один тег и одна кнопка отправки.

...