我在后端使用 MySQL 和 Django,现在最大的问题是我在 MySQL 中使用下划线,而我必须在 Django 中使用 camelCase ORM.So 问题是,我能否以某种方式告诉 Django 在单词中间遇到大写字母的地方插入下划线,以便
ownerAccount = models.ForeignKey(ownerAccount, models.CASCADE)
在 MySQL 中变得owner_account_id
。
我知道有db_column解决方案,但这对我来说听起来像是地狱,违反了 DRY。我觉得应该有一个干净快速的解决方案
根据 PEP8 中的命名约定,变量名称应以小写形式书写,必要时用下划线分隔单词以提高可读性。
因此,您的方法:
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'}
然后,您可以更改字段名称的输出。这个问题有两个答案可以进一步帮助您。
我想再次强调,无论 REST API 如何,您仍然应该遵守 PEP8 约定,并将snake_case
用于任何类属性和方法。