Django模型中的自定义主键

时间:2017-12-23 10:59:55

标签: python django primary-key

这是我的模特:

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允许我将主键作为空字符串?
  • 为什么唯一性约束不起作用?

2 个答案:

答案 0 :(得分:0)

您应该为此字段添加值。所以你应该像这样构建它:

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

这就是你的模型创建方式。它不是 autofield

答案 1 :(得分:0)

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

  

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