详解Django的 create() 函数:创建对象

  • Post category:Python

Django中的create()函数是Model类的一个快捷方法,用于同时创建并保存一个新的数据库记录。使用create()函数可以充分利用Django自动化ORM的特点,使代码更加简洁,而不用显示地创建一个Model实例并进行保存。create()函数的语法如下:

class SomeModel(models.Model):
    # fields...
    @classmethod
    def create(cls, **kwargs):
        instance = cls(**kwargs)
        instance.save()
        return instance

其中,cls代表这个Model类本身,kwargs是一个字典,表示新建记录的属性和值。除了create()函数以外,创建和保存Model类的实例的方式还有:

instance = SomeModel(**kwargs)
instance.save()

这种方式相对于用create()函数来说需要写更多的代码,但有时候可能会更加方便,比如需要在创建实例之后再进行其他处理等。但是,用create()的方式不能在实例初始化之后再进行处理。

接下来,给出两个create()方法的实例:

  1. 使用create()创建User模型的实例

假设我们有一个User模型如下:

class User(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField(unique=True)
    is_staff = models.BooleanField(default=False)

    def __str__(self):
        return self.name

我们可以使用create()方法来创建一个新的User实例:

new_user = User.objects.create(name='John', email='john@domain.com', is_staff=True)

这个语句等同于下面的语句:

new_user = User(name='John', email='john@domain.com', is_staff=True)
new_user.save()

但是,使用create()更加方便,可以减少代码量。

  1. 使用create()创建Blog、Author和Entry实例

假设我们有三个Model类:Blog,Author和Entry,其中Entry是由一个Blog和一个Author创建的。我们可以使用create()来创建它们的实例:

author = Author.objects.create(name='Jane Doe')
blog = Blog.objects.create(name='Sample Blog', tagline='Sample tagline')
entry = Entry.objects.create(headline='This is an entry', body_text='This is body text', pub_date=datetime.datetime.now(), blog=blog, author=author)

这段代码先创建一个新的Author实例,然后创建一个新的Blog实例,最后使用这两个实例创建一个新的Entry实例。