为什么带有auto_now_add的DateTimeField无法进入表单字段

时间:2018-05-30 11:33:55

标签: python django django-forms

以下是我的模特:

class MyModel(models.Model):
    code = models.CharField(_('Code'), max_length=56, null=False,
                        blank=False, db_column='code')
    name = models.CharField(_('Name'), max_length=128, null=False,
                        db_index=True, db_column='name', blank=False)
    created_at = models.DateTimeField(_('Created At'), null=False,
                                      db_column='created_at', blank=False,
                                      auto_now_add=True)

形式:

class MyForm(forms.Form):
    class Meta:
        model = MyModel 
        fields = '__all__'

视图

class MyView(View):

    def get(self, request):
        form = MyForm(request=request)
        return render(request, 'test_manager/testrule_form.html', {'form': form})

当我显示此表单时,我能够看到除created_at之外的所有字段。 有谁知道在更新某个对象时如何获得created_at字段?

1 个答案:

答案 0 :(得分:4)

如果您指定auto_now=Trueauto_now_add=True,则会同时指定字段editable=False。因此,这意味着它不会出现在表格中。

可能最小的改变是使用函数指定default值,而不是使用auto_now_add=True属性,如:

from django.utils import timezone as tz

class TestRule(models.Model):
    code = models.CharField(_('Code'), max_length=56, null=False,
                        blank=False, db_column='code')
    name = models.CharField(_('Name'), max_length=128, null=False,
                        db_index=True, db_column='name', blank=False)
    created_at = models.DateTimeField(_('Created At'), null=False,
                                      db_column='created_at', blank=False,
                                      default=tz.now)

请注意,我们调用now(..)函数。如果我们这样做,那么我们将created_at列设置为构建模型(而不是模型的实例)时的时间戳。通过传递对now(..)函数的引用,将在添加新模型实例时调用该函数。