Django模型中的自定义主键

问题描述 投票:0回答:2

这是我的模型:

class InvitationCode(models.Model):
    code = models.CharField(max_length=6, primary_key=True)
    group = models.OneToOneField(Group, on_delete=models.PROTECT)

根据doc

primary_key = True表示null = False且unique = True。

然而,这不是我所看到的:

>>> from app.models import InvitationCode
>>> c = InvitationCode(group_id=1)
>>> c.save()
>>> c.pk
''
>>> c1 = InvitationCode(group_id=1)
>>> c1.save()
>>> InvitationCode.objects.all()
<QuerySet [<InvitationCode: InvitationCode object ()>]>
  • 为什么Django允许我将主键作为空字符串?
  • 为什么唯一性限制不起作用?
python django primary-key
2个回答
0
投票

似乎我必须调用full_clean才能执行验证。正如doc所说 -

请注意,调用模型的save()方法时,不会自动调用full_clean()。如果要为自己手动创建的模型运行一步模型验证,则需要手动调用它。


0
投票

你应该把价值放在这个领域。所以你应该像这样构建它:

c = InvitationCode(group_id=1, code=1)

这就是您的模型创建方式。它不是自动场。

© www.soinside.com 2019 - 2024. All rights reserved.