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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

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

foo = FooModel()

bar = BarModel.objects.create()

第二个是否立即创建一个BarModel在数据库中FooModelsave()方法必须显式调用才能添加它?

提问于
用户回答回答于

若要在单个步骤中创建和保存对象,请使用create()方法。

用户回答回答于

我的经验是当使用Constructor(ORM)通过使用Django的引用对1.10.5数据中可能存在一些不一致的地方(例如,创建的对象的属性可以得到输入数据的类型,而不是ORM对象属性的类型):

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

扫码关注云+社区