【发布时间】:2011-11-24 19:11:21
【问题描述】:
有什么办法可以在 Django 中创建一个私有字段。我希望这个字段只能从这个类的方法中访问。
这是我想要的示例:
class TestModel(models.Model):
__some_field = models.CharField(max_length=255)
找到的解决方案:
更新:最后,我为这个案例打造了自己的解决方案,并将其添加到我的 django-fields 包中,该包可在 GitHub 上找到:https://github.com/svetlyak40wt/django-fields
具体来说,如果您想在模型中包含私有字段,则必须从我的 ModelWithPrivateFields 类继承它们。
示例可在django-fields's unittests 获得。
【问题讨论】:
-
你试过了吗?发生了什么?
-
更重要的是,您为什么要这样做?
-
Daniel,我想在数据库中存储一些对象的状态,但只能通过它的方法访问它。封装!
-
Joachim,我试过了,当然。 Django 引发异常,例如:“无法将关键字 'some_field' 解析为字段。”当我尝试执行类似的操作时:“TestModel.objects.filter(some_field='blah')”
-
@AlexanderArtemenko:当然。您已将其命名为“__some_field”,因此“some_field”将不起作用。它应该与
TestModel.objects.filter(_TestModel__some_field='blah')一起使用,尽管我从未尝试为模型字段起这样的名称。关于“为什么”,请参阅docs.python.org/tutorial/classes.html#private-variables
标签: django