首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django Model() vs Model.objects.create()

Django Model() vs Model.objects.create()
EN

Stack Overflow用户
提问于 2014-10-31 18:09:50
回答 3查看 264K关注 0票数 350

运行两个命令有什么区别:

foo = FooModel()

bar = BarModel.objects.create()

第二个方法是否立即在数据库中创建BarModel,而对于FooModel,必须显式调用save()方法才能将其添加到数据库中?

EN

回答 3

Stack Overflow用户

发布于 2017-10-04 17:42:02

这两种语法不等价,可能会导致意外错误。这里有一个简单的例子来说明不同之处。如果你有一个模型:

from django.db import models

class Test(models.Model):

    added = models.DateTimeField(auto_now_add=True)

然后创建第一个对象:

foo = Test.objects.create(pk=1)

然后尝试创建一个具有相同主键的对象:

foo_duplicate = Test.objects.create(pk=1)
# returns the error:
# django.db.utils.IntegrityError: (1062, "Duplicate entry '1' for key 'PRIMARY'")

foo_duplicate = Test(pk=1).save()
# returns the error:
# django.db.utils.IntegrityError: (1048, "Column 'added' cannot be null")
票数 20
EN

Stack Overflow用户

发布于 2017-02-09 23:46:47

更新15.3.2017:

我已经在这个问题上打开了一个Django问题,它似乎在这里被初步接受:https://code.djangoproject.com/ticket/27825

我的经验是,当通过引用在Django 1.10.5中使用Constructor (ORM)类时,数据中可能会有一些不一致(例如,创建的对象的属性可能会获得输入数据的类型,而不是1.10.5对象属性的强制转换类型)示例:

models

class Payment(models.Model):
     amount_cash = models.DecimalField()

some_test.py - object.create

Class SomeTestCase:
    def generate_orm_obj(self, _constructor, base_data=None, modifiers=None):
        objs = []
        if not base_data:
            base_data = {'amount_case': 123.00}
        for modifier in modifiers:
            actual_data = deepcopy(base_data)
            actual_data.update(modifier)
            # Hacky fix,
            _obj = _constructor.objects.create(**actual_data)
            print(type(_obj.amount_cash)) # Decimal
            assert created
           objs.append(_obj)
        return objs

some_test.py - Constructor()

Class SomeTestCase:
    def generate_orm_obj(self, _constructor, base_data=None, modifiers=None):
        objs = []
        if not base_data:
            base_data = {'amount_case': 123.00}
        for modifier in modifiers:
            actual_data = deepcopy(base_data)
            actual_data.update(modifier)
            # Hacky fix,
            _obj = _constructor(**actual_data)
            print(type(_obj.amount_cash)) # Float
            assert created
           objs.append(_obj)
        return objs
票数 12
EN

Stack Overflow用户

发布于 2021-11-21 20:04:15

Model.objects.create()创建一个模型实例并保存它。Model()仅创建内存中的模型实例。直到您调用实例的save()方法来保存它,它才会保存到数据库中。这也是验证发生的时候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26672077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档