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:Functionbound\u form
是一个视图,因此它位于views.py中,他将initial
参数传递给表单以设置初始表单值。