gpt4 book ai didi

python - 覆盖保存方法与模型方法?

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:24 26 4
gpt4 key购买 nike

考虑取自 Querying full name 的这个例子:

class User( models.Model ):
first_name = models.CharField( max_length=64 )
last_name = models.CharField( max_length=64 )
full_name = models.CharField( max_length=128 )
def save( self, *args, **kw ):
self.full_name = '{0} {1}'.format( first_name, last_name )
super( User, self ).save( *args, **kw )

根据 Django Model Method也可以这样写:

class User(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)

def _get_full_name(self):
"Returns the person's full name."
return '%s %s' % (self.first_name, self.last_name)
full_name = property(_get_full_name)

有什么区别?推荐哪一个?

最佳答案

在第一种情况下,full_name 是数据库中的一列。因此,如果您需要对其运行数据库查询,请使用它。

在第二种情况下,它只是一个只读的便利属性。所以在管理员或其他地方显示名称是可以的,但仅此而已。

因此,使用哪个的问题实际上是一个基于您需要对该字段执行的操作的设计决策。另一个常见的例子是当您使用某种 slug 字段时(其中 slug 是模型中某些文本的 URL 友好版本)。如果您正在根据 ids 进行数据库查找,那么您可能根本不需要将 slug 放入数据库中。但是,如果您想通过 slug 字段查找内容,或者如果您想在文本更改时保留旧的 slug,则需要将其设为真正的列。

关于python - 覆盖保存方法与模型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com