在显示表单之前,如何在自动生成的表单中设置字段的初始值以添加Django模型实例?我正在使用Django 1.3.1.
我的模型如下:
class Foo(models.Model):
title = models.CharField(max_length=50)
description = models.TextField()
Run Code Online (Sandbox Code Playgroud)
而目前的管理形式真的没什么特别的
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
Run Code Online (Sandbox Code Playgroud)
当我使用管理页面添加一个新的Foo实例时,我得到一个很好的表单,其中包含标题和描述的空字段.我想要的是描述字段是通过调用函数获得的模板设置的.
我目前最好的尝试是:
def get_default_content():
return 'this is a template for a Foo description'
class FooAdminForm(django.forms.ModelForm):
class Meta:
model = Foo
def __init__(self, *args, **kwargs):
kwargs['initial'].update({'description': get_default_content()})
super(FooAdminForm, self).__init__(self, *args, **kwargs)
class FooAdmin(admin.ModelAdmin):
ordering = ('title',)
form = FooAdminForm
Run Code Online (Sandbox Code Playgroud)
但如果我尝试这个,我得到这个Django错误:
AttributeError at /admin/bar/foo/add/
'FooForm' object has no attribute 'get'
Request Method: GET
Request URL: http://localhost:8000/admin/bar/foo/add/
Django Version: 1.3.1
Exception Type: AttributeError
Exception Value: 'FooForm' …Run Code Online (Sandbox Code Playgroud) 当使用raw_id_fields选项显示时,如何限制Django管理员中ForeignKey字段的显示选项?
当渲染为选择框时,可以很容易地定义自定义ModelForm,以便根据需要选择该字段的queryset值.但是,使用raw_id_fields呈现时,此查询集似乎完全被忽略.它生成一个指向ForeignKey模型的链接,允许您通过弹出窗口从该模型中选择任何记录.您仍然可以通过自定义URL来过滤这些值,但我找不到通过ModelAdmin执行此操作的方法.
我想创建一个链接,打开一个模型的django admin添加页面,其中一些字段已预填.
我检查了可以将参数添加到添加表单的GET字典中,如下所示:
<a href='/admin/myapp/mymodel/add?name=John'>add new mymodel with name John</a>
Run Code Online (Sandbox Code Playgroud)
(实际上我得到了{%url'admin:myapp_mymodel_add'%}的网址,但这只是为了明确).
现在,这适用于数值,文本值和外键.但是DateTime字段呢?当我尝试通过这样的字段时(我尝试了许多格式,例如"2014-05-09 10:10:00")我总是得到一个"服务器错误"抱怨:
'unicode'对象没有属性'date'
在代码行中:
解压缩中的django/forms/widgets.py,第902行
def decompress(self, value):
if value:
value = to_current_timezone(value)
return [value.date(), value.time().replace(microsecond=0)] ...
return [None, None]
Run Code Online (Sandbox Code Playgroud)
其中变量"value"具有我传递给URL的值...
问题1.我认为服务器代码不应该根据用户传递的值引发异常...这不是django库中的错误吗?
问题2.如何解决我的问题,即通过GET参数将初始日期时间传递给模型的管理"添加"页面?
在Django Admin中,当我单击下拉列表旁边的添加(+)按钮时,我想使用当前记录中的数据来填充外键记录的字段.
例如,我正在查看X的实例,其中包含a,b和c的字段以及外键Y.Y还包含a,b和c的字段,因此当我单击"添加"按钮时在X实例中,我希望使用X实例中的值填充新Y实例的a,b和c字段.
显然,如果我只是在管理员中添加"添加新Y",这些字段就不会预先填充!
我搜索了一下但没有用!
有人有成功吗?
(我在Python 2.6中使用django 1.3;我认为这里不需要任何代码片段.)
在Django的管理员中,我了解了如何使用GET变量/admin/app/model/add?title=lol设置“添加对象”表单的字段(例如,将“标题”字段设置为“大声笑”)。
但是,我希望能够做一些事情,/admin/app/model/add?key=18并从另一个模型的实例中为我的字段加载默认数据。理想情况下,我还希望能够对填充表单的值进行一些处理。我该怎么做呢?