如何在views.py 中创建模型实例?
Posted
技术标签:
【中文标题】如何在views.py 中创建模型实例?【英文标题】:How do I create an instance of a model in views.py? 【发布时间】:2018-07-27 16:34:36 【问题描述】:如果这是一个愚蠢的问题,我很抱歉,但我很难找出如何在视图中创建模型的新实例。
参考this question,我试过做
foo = FooModel()
save()
但是我得到了一个 NameError: name 'save' is not defined。 然后我尝试了
bar = BarModel.objects.create()
但得到 AttributeError: 'Manager' 对象没有属性 'Create'。
我不理解一些非常琐碎的事情吗?也许这些命令仅适用于命令行?在这种情况下,如何从代码中创建新对象或过滤它们等等?
【问题讨论】:
【参考方案1】:对于第一个示例,您需要调用对象的保存方法,例如foo.save()
而不仅仅是save()
:
foo = FooModel()
foo.save()
您的第二个示例看起来不错。确保您调用的是create()
(全部小写):
bar = BarModel.objects.create()
消息... no attribute 'Create'.
表明您正在呼叫BarModel.objects.Create()
,这是不正确的。
如果仍然无法解决问题,请使用实际代码和完整回溯更新您的问题。使用像 FooModel
这样的虚构名称会更难发现问题。
【讨论】:
如果我采用第二种方式,我为该对象指定的任何参数会自动保存吗?就像我这样做bar.name='emerald' #implying the model has an attribute name
bar.name='emerald'
只是设置属性。在您调用bar.save()
之前,它不会被保存到数据库中。但是,您可以使用 bar = BarModel.objects.create(name='emerald')
创建并保存具有该名称的对象。
我最后做了你建议的第二件事,谢谢。【参考方案2】:
save
是实例方法,应该是:
foo = FooModel()
foo.save()
【讨论】:
【参考方案3】:要从您的模型中创建对象的新实例,您可以这样做:
models.py
class Test(models.Model):
id = models.AutoField(primary_key=True)
views.py
test = Test()
你也可以使用构造函数:
test = Test(id=3)
test.save() # save object to database
test.objects.filter(id=3) # get object from database
【讨论】:
Test(id=3)
不是一个很好的例子——通常你应该让数据库自动设置主键。以上是关于如何在views.py 中创建模型实例?的主要内容,如果未能解决你的问题,请参考以下文章