如何在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 中创建模型实例?的主要内容,如果未能解决你的问题,请参考以下文章

Django - 如何在views.py中访问实例的值

如何在 .py 文件中创建模型实例?

如何在Django模型中使用@property?

如何在 django 中创建用于删除记录的删除按钮

如何在 Django views.py 中使用 int: 参数呈现重定向 URL?

Django REST framework编写图片上传接口并测试