【发布时间】:2010-11-30 02:18:36
【问题描述】:
我认为提出这个问题的最好方法是使用一些代码...我可以这样做吗:
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 传递给模型字段,在数据库中将列名称保留为 'foo'。当您在现有系统上工作并且您不想无缘无故地进行数据库迁移时,这非常有用
【问题讨论】:
-
我认为这是一个很好的问题,但您应该将您的“答案”作为实际答案发布。 meta.stackexchange.com/questions/17845/….
-
如果我重命名字段但使用
db_column保留列名,它仍然希望生成迁移以删除该字段并在我运行makemigrations时添加一个新字段。我可以删除此迁移,但以后我每次运行makemigrations时,它都会不断重新出现。有什么办法可以防止这种情况发生? -
本质上,这是Django empty field fallback的复制品。
-
filter by property 的问题也类似,但更通用一些。
标签: python django properties model