这些是我的要求,我无法更改它们:
name
的字段。那是我的主键id
的字段,但这不是我的主键。id
也是一个自动递增字段。我有几个问题:
primary_key
的字段中设置id
:通过使用以下方法,我已经能够解决第一个问题:
from django.db.models.fields import AutoField
from django.db.models.fields import checks
class AutoFieldNonPrimary(AutoField):
def _check_primary_key(self):
if self.primary_key:
return [
checks.Error(
"AutoFieldNonPrimary must not set primary_key=True.",
obj=self,
id="fields.E100",
)
]
else:
return []
现在我可以这样做:
class TheNiceUser(models.Model):
id = AutoFieldNonPrimary()
name = models.CharField(max_length=16, primary_key=True)
但是,仍将id声明为主键。现在,我的模型中有两个主键,并且迁移过程很麻烦。
根据django doc,情况并非如此:如果字段设置了primary_key
,则django不应添加id
字段作为主键。
但是,如果我声明一个id
字段会怎样?似乎django坚持要使用主键,即使另一个字段已经被声明为主键。
如何摆脱这种情况?