Django表单:由查询结果定义的字段,单个视图同时更新多个对象

时间:2016-03-30 16:40:31

标签: python django forms django-models django-forms

我在Django 1.8项目中有以下模型:

class MeditationType(models.Model):
    """
    Stores user's meditation types and goals
    """
    creation_date = models.DateTimeField(auto_now_add=True)
    modify_date = models.DateTimeField(auto_now=True)

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    meditation_name = models.CharField(max_length=30)

    # Meditation goals per weekday, in minutes
    goal_sun = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_mon = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_tue = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_wed = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_thu = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_fri = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])
    goal_sat = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])

    def get_absolute_url(self):
        return reverse('meditation_types_update', kwargs={'pk': self.pk})


class MeditationLog(models.Model):
    """
    Stores user's meditation logs (journal entries)
    """

    creation_date = models.DateTimeField(auto_now_add=True)
    modify_date = models.DateTimeField(auto_now=True)

    meditation_date = models.DateTimeField()

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    meditation_type = models.ForeignKey(MeditationType, on_delete=models.CASCADE)

    # Amount of time (in minutes) this meditation type was practiced on this date
    meditation_minutes = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(1440)])

    def get_absolute_url(self):
        return reverse('meditation_types_update', kwargs={'pk': self.pk})

我想构建一个包含以下字段的表单: form fields

请注意:

  • 表单将用于创建和更新条目。

  • 用户(MeditationType模型)创建了示例中使用的3种冥想(聚焦注意力,正念和爱心),因此这些字段会有所不同。对于一些用户可能是单个冥想类型,对于其他用户可能是10种不同的冥想类型。因此,必须根据每个用户的冥想类型动态定义表单字段。

  • 提交/发布此表单时,我们必须保存MeditationLog对象的多个实例(每个冥想类型一个)。

在Django 1.8中,最简单有效的方法是什么?此外,如果您能想出更好的方法来构建模型(这将使表单构建更容易),请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

经过一些研究,我终于找到了可以使用的东西:

https://jacobian.org/writing/dynamic-form-generation/(雅各布是Django最初的创始人之一)

http://www.dougalmatthews.com/2009/Dec/16/nicer-dynamic-forms-in-django/

https://code.djangoproject.com/wiki/CookBookNewFormsDynamicFields

http://agiliq.com/blog/2008/10/dynamic-forms-with-django/

http://blog.p3infotech.in/2013/how-to-create-dynamic-forms-in-django/

如果您遇到类似问题,上面的链接可能有所帮助。

感谢那些回复的人。