以下是我的模特:
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字段?
答案 0 :(得分:4)
如果您指定auto_now=True
或auto_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(..)
函数的引用,将在添加新模型实例时调用该函数。