【问题标题】:Can't override the Model Field in Django ModelForm无法覆盖 Django ModelForm 中的模型字段
【发布时间】:2017-05-07 06:10:30
【问题描述】:

我正在尝试将DateTimeWidget 和初始值添加到我的模型的到期日期字段,我正在尽可能接近文档。无论我尝试什么,我都无法让在 ModelForm 类中声明的字段覆盖模型中的现有字段。

https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#overriding-the-default-fields

如果我单独添加一个小部件,它可以工作,但是除非我在模型中设置默认值,否则我不知道如何添加初始值。有人能指出我做错了什么吗?

from django import forms

import datetime
from datetimewidget.widgets import DateTimeWidget


from .models import EstRequest


def due_date():
    due_date = (datetime.datetime.now() + datetime.timedelta(days=1))
    return due_date


class EstRequestModelForm(forms.ModelForm):

    class Meta:
        model = EstRequest
        due_date = forms.SplitDateTimeField(widget=forms.SplitDateTimeWidget, initial=due_date)

        fields = [
            'market',
            'plan',
            'builder',
            'due_date',
            'notes',
        ]

        # widgets = {
        #     # Use localization and bootstrap 3
        #     'due_date': DateTimeWidget(attrs={'id': "due_date"}, usel10n=True, bootstrap_version=3)
        # }

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    实际上你在错误的地方定义了字段,它应该在Meta类之外:

    class EstRequestModelForm(forms.ModelForm):
    
        due_date = forms.DateTimeField(widget=forms.DateTimeInput, initial=due_date)
    
        class Meta:
            model = EstRequest
            fields = [
                'market',
                'plan',
                'builder',
                'due_date',
                'notes',
            ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2014-03-11
      • 2016-03-20
      • 2010-10-23
      • 2012-05-10
      相关资源
      最近更新 更多