属性对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