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

Django 如何用模型对象数据填写表单?,django,forms,models,Django,Forms,Models,我想用模型实例中的数据填写表单。但我的表单的字段比模型少。如果我有这样的代码: class Item(models.Model) name = models.CharField(max_length=100) price = models.PositiveIntegerField() class ItemForm(forms.Form): name = forms.CharField() 这个函数有什么问题?它看起来应该如何好 def bound_form(reque

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

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”对象没有属性“get”

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

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}) 
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\u object\u或_404()
在这里作为错误处理的一种形式很有用。对缺少的id使用
Item.objects.get(id=id)
将抛出未捕获的
Item.DoesNotExist
异常。当然,您也可以使用try/except块。

如果我使用的是
Form
,您确定我应该阅读有关
ModelForm
的内容吗?还是您认为我不知道我需要什么?这应该标记为正确答案,因为它不依赖于任何特定字段,如果您有一个字段未直接存储在模型上,但仍希望通过此表单对其进行编辑,则只需使用modelformWhat。使用
ModelForm
可以,但是创建和初始化一个额外的字段如何,可能使用模型的ForeignKey的值?ModelForms支持ForeignKey和ManyToManyField属性。这个答案似乎比选定的答案更准确。这样我就不必手动更新字段。谢谢席尔瓦。我不想吹毛求疵,但我不知道如何落实你的答案。这是在forms.py还是views.py中进行的?如何使用它?@AustinA:Function
bound\u form
是一个视图,因此它位于views.py中,他将
initial
参数传递给表单以设置初始表单值。