【问题标题】:How to create private model field in Django?如何在 Django 中创建私有模型字段?
【发布时间】: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


【解决方案1】:

您为什么要这样做?

如果您只想在管理界面中隐藏此字段,您可以使用此字段的名称而不带下划线(据我所知,这对 Django 没有任何影响)并注册 TestModelAdmin 类:

class TestModelAdmin(admin.ModelAdmin):
    exclude = ('some_field',)

admin.site.register(TestModel, TestModelAdmin)

【讨论】:

  • 不,我想防止其他开发人员错误地使用我的类并保持它的状态一致。
  • 我已经找到了解决方案,如果您有兴趣,请查看更新后的原始问题。
  • 请将其作为答案,以便人们对您的解决方案进行投票。谢谢
猜你喜欢
  • 2016-11-04
  • 2013-07-05
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2013-09-29
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多