我在我的后端使用MySQL和Django,现在最大的问题是我在MySQL中使用下划线,而我必须在Django ORM中使用camelCase。所以问题是,我可以告诉Django插入下划线那些在单词中间遇到大写字母的地方,所以
ownerAccount = models.ForeignKey(ownerAccount, models.CASCADE)
在MySQL中变为owner_account_id
。
我知道有db_column解决方案,但这对我来说听起来像是地狱并且违反DRY。我觉得应该有一个干净,快速的解决方案
答案 0 :(得分:1)
根据PEP8中的naming conventions,变量名称应以小写字母书写,并在必要时用下划线分隔,以提高可读性。
因此你的方法:
ownerAccount = models.ForeignKey(ownerAccount, models.CASCADE)
错了。这不仅仅是一个问题:
1)属性名称应写为owner_account
;
2)类名称应写为OwnerAccount
,因此models.ForeignKey(OwnerAccount)
,更好的是将类名括在引号中,如models.ForeignKey('OwnerAccount')
,以使其更灵活; < / p>
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
。