从django admin中的URL预先填充DateTimeField
如何在django admin中从URL预先填充从django admin中的URL预先填充DateTimeField,django,django-models,django-admin,Django,Django Models,Django Admin,如何在django admin中从URL预先填充DateTimeField 假设您的模型是: class MyModel(models.Model): name = models.CharField(max_length=14) date = models.DateTimeField() 然后,您可以通过将值作为GET参数传递给Add视图,使模型“Add”表单预先填充值,如下所示: /admin/app/mymodel/add/?name=Test 这是一个非常酷的特性,但是
DateTimeField
假设您的模型是:
class MyModel(models.Model):
name = models.CharField(max_length=14)
date = models.DateTimeField()
然后,您可以通过将值作为GET参数传递给Add视图,使模型“Add”表单预先填充值,如下所示:
/admin/app/mymodel/add/?name=Test
这是一个非常酷的特性,但是如何在DateTimeField中实现这一点呢
我尝试了许多可能的格式,但没有成功
更新:
这似乎是不可能的,因为django admin为datetime字段
使用了一个SplitDateTimeWidget
。但是如果您不介意使用不同的小部件并松开datepicker,您可以使用DateTimeInput
小部件
最快的方法是将其添加到ModelAdmin
类中:
formfield_overrides = {
models.DateTimeField: {'widget': DateTimeInput},
}
问题似乎出在小部件上。
DateField
可以与?date=yyyy-mm-dd
配合使用,但是DateTimeField
使用SplitDateTimeWidget
。它不能将字符串作为初始值
也许您可以向
SplitDateTimeWidget
建议一个补丁来尝试转换字符串值,或者您可以更改DateTimeField
的管理默认widget(如果可能)。首先定义序列化/反序列化格式:
DATETIME_FORMAT="%Y-%m-%d %H:%M:%S"
然后,当您想要打开管理员url时,请使用它:
copiedArguments = {
"fromDateTime": event.fromDateTime.strftime(DATETIME_FORMAT)
}
return HttpResponseRedirect(
u"{}?{}".format(reverse('admin:events_event_add'), urllib.urlencode(copiedArguments)))
最后但并非最不重要的一点是在模型管理中提取日期时间:
def get_changeform_initial_data(self, request):
initialData = super(EventAdmin, self).get_changeform_initial_data(request)
initialData["fromDateTime"] = datetime.datetime.strptime(request.GET["fromDateTime"],DATETIME_FORMAT)
return initialData
是的,我可以用一个简单的TextInput小部件来代替。我还在想办法。我发现这个4岁的孩子很有用。