在Django中创建模型对象的最佳方法是什么?

22 浏览
0 Comments

在Django中创建模型对象的最佳方法是什么?

Author.objects.create(name="Joe")或者

an_author = Author(name="Joe") 
an_author.save() 

这两者有什么区别?

哪一个更好?

类似的问题:

- 在Django ORM中objects.create()和object.save()的区别

- Django: 从事务角度来看save()和create()的区别

0
0 Comments

在Django中创建模型对象的最佳方式是使用create()方法。这个问题的原因是为了简化创建和保存对象的过程。在Django 1.8中,create()方法被实现为对save()方法的封装。以下是create()方法的源代码:

def create(self, **kwargs):
        obj = self.model(**kwargs)
        self._for_write = True
        obj.save(force_insert=True, using=self.db)
        return obj

create()方法中调用了save()方法,并传递了force_insert=True参数。这个参数会强制save()方法执行SQL的INSERT操作,而不是UPDATE操作。它会在数据库中强制插入一条新记录。

save()方法根据对象的主键属性值来决定执行UPDATE还是INSERT操作。

根据以上内容,我们可以得出结论,使用create()方法是创建模型对象的最佳方式,因为它将创建和保存对象合并在一起,避免了手动调用save()方法的步骤,并且可以确保在创建新对象时执行INSERT操作。

0
0 Comments

问题的出现原因:在Django中创建模型对象的最佳方法是什么?

解决方法:使用create()方法来创建模型对象,该方法是一个方便的代理,用于使用kwargs创建一个新对象,并为您调用save()方法。在save()方法中,注意force_insert参数的使用,它指示Django始终使用INSERT SQL语句而不是UPDATE。默认值为false,因此在第二个例子中,save()方法将执行INSERT或UPDATE操作。

以下是Django源代码中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

在这段代码中,首先使用传入的kwargs参数创建一个新的对象,然后将_for_write属性设置为True,接着调用save()方法将对象保存到数据库中,最后返回创建的对象。

使用create()方法创建模型对象的好处是它简化了代码,并且确保了在创建对象时始终执行INSERT操作而不是UPDATE。这在某些情况下非常重要,例如当您需要在数据库中插入新记录而不是更新现有记录时。

在Django中,使用create()方法是创建模型对象的最佳方法,它简化了代码并确保了始终执行INSERT操作。在使用create()方法时,需要注意force_insert参数的使用,它指示Django始终使用INSERT SQL语句而不是UPDATE。

0
0 Comments

在Django中创建模型对象的最佳方法是什么?

有两种常见的方法来创建模型对象。第一种方法是使用Manager方法create。它已经为您实现了自动保存。第二种方法是创建一个类Author的实例,然后调用save方法。

在某些情况下,您需要始终调用管理器方法。例如,您需要对密码进行哈希处理。如果您希望在创建时始终修改数据,请使用管理器。

以下是解决该问题的示例代码:

# 使用create方法创建模型对象并自动保存
Author.objects.create(name="Joe")
# 先创建实例,然后调用save方法保存
author = Author(name="Joe")
author.save()
# 使用管理器方法创建用户对象,并在保存密码之前进行哈希处理
user = User.objects.create_user(username="John", password="112233")

总之,在模型中考虑使用管理器方法,如果您希望在创建时始终修改数据。

0