如何在django admin中从URL预填充DateTimeField
假设您的模型是:
class MyModel(models.Model):
name = models.CharField(max_length=14)
date = models.DateTimeField()
然后,您可以通过将它们作为GET参数传递给添加视图来使模型“添加”表单预先填充值,如:
/admin/app/mymodel/add/?name=Test
这是一个非常酷的功能,但是你如何为DateTimeField实现这个功能?
我尝试了很多可能的格式而没有成功。
更新
似乎无法做到,因为django管理员对SplitDateTimeWidget
使用了DateTimeField
。但是,如果您不介意使用其他小部件并丢失日期选择器,则可以改为使用DateTimeInput
小部件。
最快的方法是将其添加到ModelAdmin
班级:
formfield_overrides = {
models.DateTimeField: {'widget': DateTimeInput},
}
答案 0 :(得分:3)
问题似乎与小部件有关。 DateField
可以与?date=yyyy-mm-dd
一起使用,但DateTimeField
使用SplitDateTimeWidget
。它不能将字符串作为初始值。
也许您可以向SplitDateTimeWidget
提出修补程序以尝试转换字符串值,或者您可以更改DateTimeField
的管理默认窗口小部件(如果可能的话)。
答案 1 :(得分:2)
首先定义序列化/反序列化格式:
DATETIME_FORMAT="%Y-%m-%d %H:%M:%S"
然后当你想打开管理网址时使用它:
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