如何用模型对象数据填写表格?

Posted

技术标签:

【中文标题】如何用模型对象数据填写表格?【英文标题】:How can I fill up form with model object data? 【发布时间】:2011-10-30 15:02:50 【问题描述】:

我想用模型实例中的数据填写表格。但是我的表单的字段比模型少。如果我有这样的代码:

class Item(models.Model)
    name = models.CharField(max_length=100)
    price = models.PositiveIntegerField()

class ItemForm(forms.Form):
    name = forms.CharField()

这个函数有什么问题,它应该看起来不错?

def bound_form(request, id):
    item = Item.objects.get(id=id)
    form = ItemForm(item.name)
    return render_to_response('bounded_form.html', 'form': form)

我收到这样的错误:AttributeError: 'ItemForm' object has no attribute 'get'

【问题讨论】:

docs.djangoproject.com/en/1.3/topics/forms/modelforms 如果我使用Form,您确定我应该阅读有关ModelForm 的内容吗?还是您认为我不知道我需要什么? 【参考方案1】:

通常在为模型创建表单时,您需要使用ModelForm。它遵循 DRY 原则,因此您不必为表单类重新定义字段类型。它还自动处理验证。您保留完全的灵活性来自定义使用的字段和小部件。使用fields 指定您想要的字段或使用exclude 指定要忽略的字段。用你的例子:

from django import forms
from django.shortcuts import get_object_or_404

class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ("name", )

def bound_form(request, id):
    item = get_object_or_404(Item, id=id)
    form = ItemForm(instance=item)
    return render_to_response('bounded_form.html', 'form': form)

get_object_or_404() 在这里作为错误处理的一种形式很有用。在缺少的 ID 上使用 Item.objects.get(id=id) 将引发未捕获的 Item.DoesNotExist 异常,否则。当然,您也可以使用 try/except 块。

【讨论】:

这应该标记为正确答案,因为它不依赖于任何特定的字段,只是使用模型形式 如果您有一个字段没有直接存储在模型上,但仍想通过此表单对其进行编辑,该怎么办。使用ModelForm 很好,但是如何创建和初始化一个附加字段,也许使用模型的 ForeignKey 的值? ModelForms 支持 ForeignKey 和 ManyToManyField 属性。 docs.djangoproject.com/en/1.4/topics/forms/modelforms/… 这个答案似乎比所选的更准确。这样我就不必手动更新字段。谢谢席尔瓦。 @jozxyqk 您仍然可以将 initial=,,.. 传递给 ModelForm。在该模型中,您可能已经定义了那些“额外”字段(不直接与模型相关联。假设您在模型表单中定义:foo = Charfield(....),那么您仍然可以执行 form = ItemForm (instance=item, initial="foo":"blabla")【参考方案2】:
def bound_form(request, id): 
    item = Item.objects.get(id=id) 
    form = ItemForm(initial='name': item.name) 
    return render_to_response('bounded_form.html', 'form': form) 

【讨论】:

我讨厌批评,但我不知道如何实施您的答案。这是在forms.py 还是views.py 中?我该如何使用它? @AustinA:函数bound_form 是一个视图,所以它在views.py 中,他将initial 参数传递给表单以设置初始表单值。

以上是关于如何用模型对象数据填写表格?的主要内容,如果未能解决你的问题,请参考以下文章

请教如何用JQuery导入导出excel表格

如何用SQL创建一个表格?

如何用表格查重复

如何用函数或VBA调用(引用)另外一个工作表的数据

在Excel中如何用表格背景颜色筛选数据啊?

在Excel中如何用表格背景颜色筛选数据啊?