【发布时间】:2013-12-11 17:11:24
【问题描述】:
我有需要使用以下模型实现嵌套 django 表单的功能
class Publisher(models.Model):
name = models.CharField(max_length=256)
address1 = models.CharField(max_length=256)
address2 = models.CharField(max_length=256)
city = models.CharField(max_length=256)
class Author(models.Model):
publisher = models.ForeignKey(Publisher)
name = models.CharField(max_length=256)
address = models.CharField(max_length=256)
class Book(models.Model):
author = models.ForeignKey(Author)
name = models.CharField(max_length=256)
price = models.FloatField()
forms.py
class PublisherForm(ModelForm):
class Meta:
model = Publisher
def __init__(self, *args, **kwargs):
super(PublisherForm, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Publisher Name', 'autofocus':'autofocus'}
self.fields['address'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Publisher Address '}
class AuthorForm(ModelForm):
class Meta:
model = Author
exclude = ('publisher',)
def __init__(self, *args, **kwargs):
super(AuthorForm, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Author Name'}
self.fields['address'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Author Address'}
class BookForm(ModelForm):
class Meta:
model = Book
exclude = ('author',)
def __init__(self, *args, **kwargs):
super(BookForm, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Book Name'}
self.fields['price'].widget.attrs = {'id':'inputIcon', 'class':'input-block', 'placeholder':'Book Price'}
所以对于上述模型和表单,我需要在同一屏幕上动态创建表单,就像下面的 UI 屏幕一样
所以从上面的屏幕中,我们可以观察到三个模型表单都应该显示在同一个页面上。
1. The publisher may have many authors
2. Each author may have many books
您也可以从设计中观察到,我们有两个按钮用于
1.Add Another Author - Adding Multiple Authors
2.Add Book - Adding multiple books for Author
2。添加图书
当我们点击添加图书时,应该会创建一个新的图书表单,如屏幕截图所示
1.添加其他作者
当我们点击Add another author按钮时,应该会显示一个新的作者记录,他可以通过点击Add Book为这个作者添加多本书,就像上面一样
如果我们只有两个模型 A 和 B,如果 B 有 ForeignKey 到 A,那么我们可以通过使用 django formsets or inline_formsets or model_formsets 来实现这个功能,但是在上面我们应该能够
- 为
Author添加嵌套(多个)Book表单 - 为发布者添加嵌套(多个)
Author表单
那么如何实现上面的功能呢?我搜了很多,还是没搞明白上面的东西
【问题讨论】:
标签: javascript django multiple-instances django-forms