假设我有两个模型:
class Topic(models.Model):
title = models.CharField()
# other stuff
class Post(models.Model):
topic = models.ForeignKey(Topic)
body = models.TextField()
# other stuff我想要创建一个包含两个字段的表单:Topic.title和Post.body。当然,我可以创建以下表单:
class TopicForm(Form):
title = forms.CharField()
body = forms.TextField()
# and so on但是我不想重复代码,因为我已经在模型中使用了title和body。我在找这样的东西:
class TopicForm(MagicForm):
class Meta:
models = (Topic, Post)
fields = {
Topic: ('title', ),
Post: ('body', )
}
# and so on另外,我想在基于类的视图中使用它。我的意思是,我想写成:
class TopicCreate(CreateView):
form_class = TopicForm
# ...
def form_valid(self, form):
# some things before creating objects正如评论中所建议的那样,我可以使用两种形式。但是我看不到在TopicCreate视图中使用两种表单的任何简单方法--我应该重新实现属于获取表单的所有方法(至少)。
所以,我的问题是:
在Django中是否已经为我的需求实现了什么?还是有更好(更简单)的方法?
或
你知道在基于类的视图中使用两种形式的简单方法吗?如果是这样的话,告诉我,它也能解决我的问题。
发布于 2013-06-26 07:21:41
您可以为每个模型创建两个具有所需字段的单独表单。然后在一个html元素中的模板中显示这两个表单。这两个表单都将被呈现,然后单独提交。然后,可以在视图中单独处理表单。
class TopicForm(ModelForm):
class Meta:
model = Topic
fields = ("title", ..)
class PostForm(ModelForm):
class Meta:
model = Post
fields = ("body", ..)考虑到:
form1 = TopicForm()
form2 = PostForm()在模板中:
<form ...>
{{ form1 }}
{{ form2 }}
</form>您可以轻松地使用form.save()和所有其他函数,而无需自己动手。
https://stackoverflow.com/questions/17313558
复制相似问题