【问题标题】:How do I create an instance of a model in views.py?如何在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'。

我不理解一些非常琐碎的事情吗?也许这些命令仅适用于命令行?在这种情况下,如何从代码中创建新对象或过滤它们等等?

【问题讨论】:

    标签: python django django-models


    【解决方案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) 不是一个很好的例子——通常你应该让数据库自动设置主键。
      猜你喜欢
      • 2021-03-09
      • 2022-11-21
      • 2021-03-11
      • 2013-03-25
      • 2011-08-02
      • 2011-01-29
      • 1970-01-01
      • 2023-02-11
      相关资源
      最近更新 更多