属性对Django模型字段有效吗?

我认为最好的方法是使用一些代码…我可以这样做吗?(编辑:答案:否)

class MyModel(models.Model):    

foo = models.CharField(max_length = 20)

bar = models.CharField(max_length = 20)

def get_foo(self):

if self.bar:

return self.bar

else:

return self.foo

def set_foo(self, input):

self.foo = input

foo = property(get_foo, set_foo)

还是我必须这样做:

是的,您必须这样做:

class MyModel(models.Model):

_foo = models.CharField(max_length = 20, db_column='foo')

bar = models.CharField(max_length = 20)

def get_foo(self):

if self.bar:

return self.bar

else:

return self._foo

def set_foo(self, input):

self._foo = input

foo = property(get_foo, set_foo)

注意:您可以通过将db_column传递给model字段来在数据库中将列名保持为’foo’。当您在现有系统上工作并且不想无缘无故进行数据库迁移时,这非常有用

回答:

模型字段已经是属性,所以我要说第二种方法是避免名称冲突。

定义时,foo = property(..)它实际上将覆盖该foo = models..行,因此该字段将不再可访问。

你需要为属性和字段使用其他名称。实际上,如果按照示例1的方式进行操作,则在尝试访问该属性时将获得一个无限循环,因为该属性现在试图返回自身。

编辑:也许你还应该考虑不用_foo作字段名称,而是foo,然后为属性定义另一个名称,因为不能在中使用属性QuerySet,因此例如在进行过滤时,你将需要使用实际的字段名称。 。

以上是 属性对Django模型字段有效吗? 的全部内容, 来源链接: utcz.com/qa/400360.html

回到顶部