更改Django ORM

时间:2018-03-22 08:09:54

标签: mysql django orm

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

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

在MySQL中变为owner_account_id

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

1 个答案:

答案 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