从django admin中的URL预先填充DateTimeField

从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 这是一个非常酷的特性,但是

如何在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中实现这一点呢

我尝试了许多可能的格式,但没有成功

更新:

这似乎是不可能的,因为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岁的孩子很有用。