【问题标题】:Django Forms - set field values in viewDjango Forms - 在视图中设置字段值
【发布时间】:2011-08-20 22:08:18
【问题描述】:

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

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

有什么帮助吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

    定义模型时,可以为每个字段设置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")),
            }
    

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

    【讨论】:

    • 甜蜜,这看起来对我有用。但是,我有一个后续问题。如果我使用 default=date.today 方法,它将给出 YYYY-MM-DD 的值。我需要将其更改为 MM/DD/YYYY。我试过 date.today().strftime(%m\/%d\/%Y) 但 django 不喜欢这样。有什么想法吗?
    • 没关系,Django 可以使用我的 YYYY-MM-DD 格式。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2017-09-22
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多