第一个问题。
我遇到了创建一个创建事件的结构的问题,该事件包含多个(用户指定了多少)活动,并且每个活动可能会多次出现。我喜欢我的形式的结构是:
\-- Event
Activity 1
Time 1
Time 2
Time 3
Activity 2
Time 1
Time 2
Time 3
用户可以在其中添加更多活动,并为每项活动添加更多次。
models.py
def Event(models.Model):
# not relevant attrs
def Activity(models.Model):
event = models.ForeignKey(Event)
# more irrelevant stuff
def ActivityTime(models.Model):
activity = models.ForeignKey(Activity)
start_time = models.TimeField()
end_time = models.TimeField()
# more irrelevant stuff
我正在使用modelforms来表示Event,Activity,ActivityTime。我希望每次都能“了解”当我将条目添加到数据库时的相应活动。我不确定如何实现这一点。我没有幸运使用内联formset,但可能是因为有些东西我不理解。
答案 0 :(得分:0)
内联formset是一种模型formset。
要创建表单集,您将使用inlineformset_factory
。如果你看一下这里的文档:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#limiting-the-number-of-editable-objects
...您会看到它支持两个参数max_num
和extra
,它们共同决定是否以及将多少额外的空白表单添加到表单集中。
如果你谷歌搜索'django动态formset',你会发现一些软件包提供了一些javascript,可以从前端端向formset添加更多'额外'空白表单(与Django管理员一样)。
答案 1 :(得分:0)
我不确定这是否是最佳方式,但我决定使用angularjs动态创建表单,并通过post调用传递数据以在服务器端验证它。对于任何有兴趣的人,我都跟着这个堆栈问题:AngularJS - Server side validation and client side forms