Django Form基于多个模型

时间:2011-09-12 10:49:08

标签: python django django-models django-forms

如果我在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)

如何创建一个允许同时添加AuthorBook的表单。如果作者存在于系统中,我可以简单地显示书籍形式并将其链接到作者,但我经常需要允许我的用户同时创建书籍和作者。

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以编写自定义表单,该表单将检查作者是否存在于系统中使用现有表单,如果不存在,则使用提供的名称创建新表单。

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

不确定此代码是否有效,但我想它可以解释我的想法。

答案 1 :(得分:0)

您可以创建一个处理多个表单的视图 - 请参阅http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/以获得一个很好的示例。

您必须确保仅使用一个标记和一个提交按钮在模板中完成表单对象的呈现。