自动设置对象的创建日期的最佳方法是什么,以及将在上次更新对象时记录的字段?
在我的模型中,我有:
created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)
Run Code Online (Sandbox Code Playgroud)
在我看来:
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
return HttpResponseRedirect('obj_list')
Run Code Online (Sandbox Code Playgroud)
我收到错误:
objects_object.created_at may not be NULL
Run Code Online (Sandbox Code Playgroud)
我是否必须自己手动设置此值?我认为这是传递给DateTimeFields的参数点(或者它们只是默认值,因为我设置'editable = False'它们不会显示在表单上,因此不会在请求中提交,因此不要进入表格?).
这样做的最佳方法是什么?一个init方法?
谢谢
ps - 我是django和Python的新手......
即使字段标记为'editable=False'模型,我希望管理页面显示它.目前它完全隐藏了这个领域..如何实现这一目标?
为什么我的"日期"字段没有出现在管理系统中?
在我的admin.py文件中
from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)
Run Code Online (Sandbox Code Playgroud)
而评级模型有一个名为"日期"的字段,如下所示
date = models.DateTimeField(editable=True, auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
但是在管理系统中,即使editable设置为,该字段也不会显示True.
有谁有想法吗?
注意:我删除了之前存在的问题,并在此处仅提供相关信息.
我们的数据库服务器(RH)指定了TIME_ZONE ="Europe/London".并且,在Django settings.py中,我们指定TIME_ZONE ="America/New_York".
并且,在我的Model类中,我指定了:
created = models.DateTimeField(editable=False,auto_now=False, auto_now_add=True)
modified = models.DateTimeField(editable=False,auto_now=True, auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
当我再去查看管理站点中的数据时,我得到UTC/GMT时间而不是东部时间.
我认为所有的时间都是由Django自动调整的,因为我将"America/New_York"指定为Django的时区.
任何帮助/澄清表示赞赏.
谢谢Eric
在其中一个模型中,我设置了一个时间戳字段,如下所示:
created_datetime = models.DateTimeField(auto_now_add = True)
Run Code Online (Sandbox Code Playgroud)
虽然在shell中我能够创建一个obj并保存它,但是在我的应用程序中它引发了一个异常,即created_datetime字段不能为null.
事情出了问题困惑!! 如何重新获得它.
我有模型创建的字段可配置如下:
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
在JSON fixture中我不想为create创建值,但是当我尝试加载fixture(loadata)时,我收到错误:
created可能不是NULL
所以我必须在灯具中提供创造价值或者还有其他方法吗?

上面是我在管理界面中的表之一,按降序排列id(最近的记录在顶部)。这是我用来创建模型对象并保存的方法。
notification = Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now())
notification.save()
Run Code Online (Sandbox Code Playgroud)
该表的所有插入Notification操作仅在各种post_save信号处理程序中完成。会引起这样的不一致吗?
TIME_ZONE = 'GMT'在django 1.3.2中使用。我可以尝试使用auto_now_add=True模型中的选项,但在此之前,我只是想知道为什么会这样。
以下是我的模型:
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)
Run Code Online (Sandbox Code Playgroud)
形成:
class MyForm(forms.Form):
class Meta:
model = MyModel
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
视图
class MyView(View):
def get(self, request):
form = MyForm(request=request)
return render(request, 'test_manager/testrule_form.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
显示此表单时,我可以看到除created_at之外的所有字段。有谁知道在更新某些对象时如何获取created_at字段?
我有以下型号:
class MetaData(models.Model):
created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True,
related_name='%(app_label)s_%(class)s_created_by')
updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
related_name='%(app_label)s_%(class)s_updated_by')
Run Code Online (Sandbox Code Playgroud)
update_at字段也在创建时使用值完成,而不是为null.我希望只有在第一次保存/创建之后才有值.
难道我做错了什么 ?