Django - 模型字段和模型属性之间有什么区别?

use*_*875 9 django django-models

在这个链接中(对于ReadOnlyField):http://www.django-rest-framework.org/api-guide/fields/#readonlyfield它说"当包含与一个相关的字段名称时,默认情况下使用此字段与ModelSerializer属性而不是模型字段".话虽如此,你能给我一个模型字段名称的例子,它是一个"属性",一个模型字段名称是一个"字段"吗?

Rod*_*ier 21

Django,a model field属于数据库中的列.另一方面,a model attribute属于添加到a的方法或属性model.

class MyModel(models.Model):
    name = models.CharField()
    quantity = models.IntegerField()
    price = models.DecimalField()

    @property
    def description(self):
        return '{}x of {}'.format(quantity, name)

    def compute_total(self):
        return quantity * price
Run Code Online (Sandbox Code Playgroud)

在上面的例子,name,quantitypricemodel fields因为它们是在数据库的列.同时,descriptioncompute_totalmodel attributes.

  • 不需要`@ property`装饰器.当你添加装饰器时它变成了一个对象属性,这意味着你在调用它时不能传递参数.因此,对于上面的内容,您可以将`description`称为`obj.description`.同时,`compute_total`是一个方法,这意味着你可以在调用时添加/传递参数.你可以像`obj.compute_total()`一样调用`compute_total`,或者如果有参数,`obj.compute_total(arg1,arg2,kwarg1 = val1)` (9认同)
  • 您提到"模型属性与添加到模型的方法或属性有关".有没有任何方法可以在没有`@ property`装饰器的情况下创建模型属性?在你的例子中,你使用`@ property`装饰器来表示`description`而不是`compute_total`,但是你提到`compute_total`也是一个模型属性.话虽如此,是否需要`@ property`装饰器?它有什么用途? (7认同)