Django视图和表单

时间:2012-12-10 18:32:30

标签: django django-models django-forms django-views

使用模型提供飞行小时总数时遇到问题,因此可以将总飞行小时数添加到提交的小时数。这是我正在使用的代码片段,但到目前为止,在过去一小时左右的时间里,没有任何工作。

Views.py

        pirephours = int(user_profile.totalhours) + 1
        user_profile.update(totalhours=pirephours)

Models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    country = models.CharField("Country", max_length=50)
    totalflights = models.IntegerField("Total Flights", default=0)
    totalhours = models.IntegerField("Total Hours",default=0)
    hub = models.ForeignKey(Airports, default=0)

视图中的+ 1目前仅为总小时数增加1小时,但我还想知道是否有办法使用表单中提交的内容而不是数字。表单只是模型本身的模型形式。

任何输入都会很棒。

2 个答案:

答案 0 :(得分:1)

我假设user_profile是来自ORM的对象,例如UserProfile.objects.get(pk = 1)。

Django自动处理插入和更新。

您要做的是使用user_profile.save()

如果user_profile包含id,它将尝试更新数据库。

答案 1 :(得分:0)

我遇到此问题的方法是使用 FormSets 。我将两个表单添加到formset列表,模型表单和带有额外字段的第二个表单。然后我将formSet发送到模板。在视图中:

forM = UserProfileModelFormForm( ...
forE = ExtraUserProfileSingleForm( ...
formSet = [ forM, forE  ]

在模板中:

<form method="post" action="">
    {% for form in formSet %}
        {{ form }}
    {% endfor %}
</form>

在视图端,您应该向两个表单发送POST请求以检查is_valid()方法('和'运算符就足够了:if forM.is_valid() and forE.is_valid(): ...

请注意,存在一种未记录的方法,可以将额外字段添加到模型表单中:Specifying widget for model form extra field (Django)