【问题标题】:Changing the default SQL column name transition rules in Django ORM更改 Django ORM 中的默认 SQL 列名转换规则
【发布时间】:2018-08-31 14:06:20
【问题描述】:

我在后端使用 MySQL 和 Django,现在最大的问题是我在 MySQL 中使用下划线,而我必须在 Django ORM 中使用 camelCase。所以问题是,我可以告诉 Django 在其中插入下划线吗那些在单词中间遇到大写字母的地方,这样

ownerAccount = models.ForeignKey(ownerAccount, models.CASCADE)

在 MySQL 中变为 owner_account_id。

我知道有db_column 解决方案,但这对我来说听起来像是地狱,并且违反了 DRY。我觉得应该有一个干净而快速的解决方案

【问题讨论】:

    标签: mysql django orm


    【解决方案1】:

    根据PEP8中的naming conventions,变量名应小写,必要时用下划线分隔单词以提高可读性。

    因此你的方法:

    ownerAccount = models.ForeignKey(ownerAccount, models.CASCADE)
    

    错了。而且不止一个问题:

    1) 属性名应写为owner_account;

    2) 类名要写成OwnerAccount,也就是models.ForeignKey(OwnerAccount),更好的是把类名用引号括起来,比如models.ForeignKey('OwnerAccount'),这样更灵活;

    3) 为获得更好的可读性并符合 Django 约定,您应该使用关键字参数on_delete,例如on_delete=models.CASCADE。

    db_column 有其合理性,如果没有它,框架将非常不灵活,并且在许多情况下完全无法使用。

    总而言之,快速正确的解决方案是使用snake_case 作为模型类(或任何类)的属性名称。

    编辑:
    如果您使用 Django REST Framework 创建一个 REST API 并希望为键使用不同的名称,例如:

    {'ownerAccount': 'some value'}
    

    代替:

    {'owner_account': 'some_value'}
    

    然后您可以更改字段名称的输出。这个question 有两个答案可以进一步帮助你。

    我想再次强调,无论使用何种 REST API,您仍应遵守 PEP8 约定并为任何类属性和方法使用 snake_case。

    【讨论】:

    • 如果我必须在我的 REST 应用程序中使用 camelCase 怎么办?
    • @EdgarNavasardyan 你为你的 REST API 使用 Django REST 框架吗?
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 2010-09-14
    • 2016-05-06
    • 2016-11-07
    • 1970-01-01
    • 2015-07-01
    • 2010-10-19
    相关资源
    最近更新 更多