Django Forms - 在视图中设置字段值

时间:2011-05-07 21:58:25

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

我有一个代表工单的模型。其中一个字段是DateField,表示工作订单的创建日期(恰当地命名为:dateWOCreated)。当用户创建新的工作订单时,我希望此dateWOCreated字段自动填充今天的日期,然后显示在模板中。我有一些其他字段我想在没有用户干预的情况下设置,但应该在模板中向用户显示这些值。

我不想简单地从modelForm类中排除这些字段,因为用户可能需要能够在路上编辑这些值。

任何帮助?

由于

1 个答案:

答案 0 :(得分:7)

定义模型时,可以为每个字段设置default。默认对象可以是可调用的。对于dateWOCreated字段,我们可以使用可调用date.today

# models.py
from datetime import date

class WorkOrder(models.Model):
    ...
    dateWOCreated = models.DateField(default=date.today)

要以MM/DD/YYYY格式显示日期,您需要覆盖模型表单中的小部件。

from django import forms
class WorkOrderModelForm(forms.ModelForm):
    class Meta:
        model = WorkOrder
        widgets = {
            'dateWOCreated': forms.DateInput(format="%m/%d/%Y")),
        }

在表单和模型表单中,默认参数的模拟是initial。对于其他字段,您可能需要动态计算视图中的初始字段值。我在下面举一个例子。有关详细信息,请参阅Django Docs for Dynamic Initial Values

# views.py
class WorkOrderModelForm(forms.ModelForm):
    class Meta:
        model = WorkOrder

def my_view(request, *args, **kwargs):
    other_field_inital = 'foo' # FIXME calculate the initial value here  
    form = MyModelForm(initial={'other_field': 'other_field_initial'})
    ...