Django动态添加表单,以便它意识到它是父

时间:2014-07-31 22:02:42

标签: django django-forms

第一个问题。

我遇到了创建一个创建事件的结构的问题,该事件包含多个(用户指定了多少)活动,并且每个活动可能会多次出现。我喜欢我的形式的结构是:

\-- 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,但可能是因为有些东西我不理解。

2 个答案:

答案 0 :(得分:0)

内联formset是一种模型formset。

要创建表单集,您将使用inlineformset_factory。如果你看一下这里的文档:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#limiting-the-number-of-editable-objects

...您会看到它支持两个参数max_numextra,它们共同决定是否以及将多少额外的空白表单添加到表单集中。

如果你谷歌搜索'django动态formset',你会发现一些软件包提供了一些javascript,可以从前端端向formset添加更多'额外'空白表单(与Django管理员一样)。

答案 1 :(得分:0)

我不确定这是否是最佳方式,但我决定使用angularjs动态创建表单,并通过post调用传递数据以在服务器端验证它。对于任何有兴趣的人,我都跟着这个堆栈问题:AngularJS - Server side validation and client side forms