bfo*_*met 3 django django-models django-admin
如何DateTimeField
在 django admin 中预填一个from URL?
假设您的模型是:
class MyModel(models.Model):
name = models.CharField(max_length=14)
date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过将值作为 GET 参数传递给添加视图,使模型“添加”表单预填充值,例如:
/admin/app/mymodel/add/?name=Test
Run Code Online (Sandbox Code Playgroud)
这是一个非常酷的功能,但是您如何为 DateTimeField 实现这一点?
我尝试了许多可能的格式但没有成功。
更新:
这似乎是不可能的,因为 django admin 使用SplitDateTimeWidget
for DateTimeField
。但是,如果您不介意使用不同的小部件并丢失日期选择器,则可以改用DateTimeInput
小部件。
最快的方法是将其添加到您的ModelAdmin
类中:
formfield_overrides = {
models.DateTimeField: {'widget': DateTimeInput},
}
Run Code Online (Sandbox Code Playgroud)
小智 5
首先定义序列化/反序列化格式:
DATETIME_FORMAT="%Y-%m-%d %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)
然后当你想打开管理 url 时使用它:
copiedArguments = {
"fromDateTime": event.fromDateTime.strftime(DATETIME_FORMAT)
}
return HttpResponseRedirect(
u"{}?{}".format(reverse('admin:events_event_add'), urllib.urlencode(copiedArguments)))
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是在模型管理员中提取日期时间:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
793 次 |
最近记录: |