django - 如何为 Django 管理模型添加实例表单设置初始数据?

标签 django forms model admin

在显示表单之前,如何在自动生成的表单中设置字段的初始值以添加 Django 模型实例?我正在使用 Django 1.3.1。

我的模型如下:

class Foo(models.Model):
  title = models.CharField(max_length=50)
  description = models.TextField()

而当前的管理表单真的没什么特别的
class FooAdmin(admin.ModelAdmin):
  ordering = ('title',)

当我使用管理页面添加 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

但是如果我尝试这个,我会得到这个 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' object has no attribute 'get'
Exception Location: /www/django-site/venv/lib/python2.6/site-packages/django/forms/widgets.py in value_from_datadict, line 178

我不知道这里出了什么问题,我应该怎么做才能让它发挥作用。我还觉得这个错误很奇怪(除了我看到它的事实)是我的代码中根本没有 FooForm ?

最佳答案

您需要包含 self作为您 __init__ 中的第一个参数方法定义,但在调用父类(super class)的方法时不应包含它。

def __init__(self, *args, **kwargs):
    # We can't assume that kwargs['initial'] exists! 
    if 'initial' not in kwargs:
        kwargs['initial'] = {}
    kwargs['initial'].update({'description': get_default_content()})
    super(FooAdminForm, self).__init__(*args, **kwargs)

话虽如此,模型字段可以为其 default 调用可调用对象。 ,因此您可能根本不必定义自定义管理表单。
class Foo(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField(default=get_default_content)

关于django - 如何为 Django 管理模型添加实例表单设置初始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000950/

相关文章:

mysql - Sequelize Node.js 新功能在创建多对多关系后不起作用

python - 如何修复表 x 没有名为 y 的列?

javascript - 从 JS 向 Django 表单输入字段插入一个变量

python - 如何使用两个不同的配置文件扩展 Django 用户模型?

Django-mptt 和多个 parent ?

jquery - 将li的内容包裹在标签中

.net - 从 WCF 服务生成单独的 "model"类

python - Django Wsgi ModuleNotFoundError : No module named 'project_name'

php - 显示可能通过 HTTP POST (PHP + MySQL) 更改的项目列表的最佳做法是什么

forms - IE8 是否支持以百分比表示的宽度值?