我在django中使用modelform插入和更新数据库中的对象,但是当我尝试更新时,我看不到正在更新的对象的主键/id:
我的模型:
class Category(models.Model):
name = models.CharField(max_length=20, db_index = True)
还有我的表格:
class CategoryForm(ModelForm):
class Meta:
model = Category
fields = ['name']
在我的模板里我得到了:
{% csrf_token %}
{{ category_form.as_p }}
在我看来是的
cat = Category.objects.get(pk = cat_id)
data['category_form'] = CategoryForm(instance = cat)
然后将数据传递给我的模板,模板将表单呈现为ok,但是我要更新的对象的id在html源代码中不存在。那么代码现在怎么能更新什么对象呢?
我觉得问这个问题很愚蠢,因为它应该是非常基本的,但我已经遵循了所有的教程,浏览了django文档,搜索和搜索这个网站没有运气。
提前谢谢。
在你看来,
cat_id
是从哪里来的?我猜你是通过网址收到的,比如:在某处。现在在您的视图中,您可以从适当的视图函数参数中读取它:
现在您可以获取具有正确id的对象,您可以在此处执行以下操作:
…并实例化
ModelForm
传递它cat
对象,如果您想要编辑现有对象,或者不传递它,如果您想要一个空表单来创建对象。主键是实例对象“cat”上名为“id”的属性。表单本身,在您的示例中用“cat id”表示。模型表单应该注意跟踪主键-您只需要将结果“request.POST”数据传递回CategoryForm,使用is_valid()使数据有效,然后保存它。
即
对此的解释可以在django文档中找到,这里是:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
尝试更新已保存的实体时,重新创建表单时必须提供实例参数。否则django将尝试插入一个新实体。
相关问题 更多 >
编程相关推荐