基于多个模型的Django表单

3 投票
2 回答
2597 浏览
提问于 2025-04-17 02:05

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

我该如何创建一个表单,让你可以同时添加一个作者和一本呢?如果作者已经在系统里存在,我可以简单地显示书的表单,并把它和作者关联起来,但我经常需要让用户能够同时创建书和作者。

我该怎么做呢?

谢谢。

2 个回答

0

你可以创建一个视图来处理多个表单,具体可以参考这个很棒的例子:http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/

你需要确保在模板中只用一个<form>标签和一个提交按钮来渲染这些表单对象。

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

我不确定这段代码是否能正常工作,但我想它可以帮助解释我的想法。

撰写回答