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

Gar*_*nzo 8 django django-models django-forms django-views

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

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

有帮助吗?

谢谢

Ala*_*air 7

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

# models.py
from datetime import date

class WorkOrder(models.Model):
    ...
    dateWOCreated = models.DateField(default=date.today)
Run Code Online (Sandbox Code Playgroud)

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

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

在表单和模型表单中,默认参数的模拟是初始的.对于其他字段,您可能需要动态计算视图中的初始字段值.我在下面举一个例子.有关详细信息,请参阅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'})
    ...
Run Code Online (Sandbox Code Playgroud)