【问题标题】:Django model manager objects.create where is the documentation?Django 模型管理器 objects.create 文档在哪里?
【发布时间】:2012-04-14 00:04:05
【问题描述】:

我总是读到我应该使用

model = Model(a=5, b=6)
model.save()

但我刚刚看到有一个管理器函数 create,因为我看到一个开源 django 应用程序正在使用它。

model = Model.objects.create(a=5, b=6)
print model.pk
1

那么建议使用它吗?还是仍然首选使用 .save 方法。我猜 objects.create 无论如何都会尝试创建它,而如果指定了 pk,save 可能会保存现有对象。

这些是我找到的文档:https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects

【问题讨论】:

  • 为什么这个问题被否决了?我刚带着同样的问题来到这里,发现这很有用。
  • 我也不知道,也许人们认为这是愚蠢而明显的。不要太在意它:P 我得到了我的答案,我很高兴。我也搜索了没有结果,所以我问了。

标签: python django


【解决方案1】:
p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

相当于:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True)

force_insert 表示将始终创建一个新对象。
通常你不需要担心这个。但是,如果您的模型 包含您设置的手动主键值,如果该值 数据库中已经存在,对 create() 的调用将失败并返回 IntegrityError 因为主键必须是唯一的。准备好 如果您使用手动主键,请处理异常。

【讨论】:

    【解决方案2】:

    它位于页面"QuerySet API reference",链接自文档索引。

    【讨论】:

      【解决方案3】:

      create 本质上也是如此。下面是create的源代码。

      def create(self, **kwargs):
          """
          Creates a new object with the given kwargs, saving it to the database
          and returning the created object.
          """
          obj = self.model(**kwargs)
          self._for_write = True
          obj.save(force_insert=True, using=self.db)
          return obj
      

      它创建一个实例然后保存它。

      【讨论】:

        【解决方案4】:

        这两种方法基本上都是equivalentModel.objects.create 的用法可能是首选,因为它更适合 Django 的风格。

        【讨论】:

          猜你喜欢
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-05
          • 2021-04-05
          • 2012-09-03
          • 2011-04-22
          • 1970-01-01
          相关资源
          最近更新 更多