基于多个模型的Django表单
如果我在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
我不确定这段代码是否能正常工作,但我想它可以帮助解释我的想法。