Python 主键值为NULL

Python 主键值为NULL,python,mysql,sql,django,Python,Mysql,Sql,Django,我希望有一个实体,如下所示: class EntitySharedLinkPermission(models.Model): OFF = None COMPANY_VIEW = "Company View" COMPANY_EDIT = "Company Edit" PUBLIC_VIEW = "Public View" PUBLIC_EDIT = "Public Edit" name = models.CharField(max_length

我希望有一个实体,如下所示:

class EntitySharedLinkPermission(models.Model):

    OFF = None
    COMPANY_VIEW = "Company View"
    COMPANY_EDIT = "Company Edit"
    PUBLIC_VIEW = "Public View"
    PUBLIC_EDIT = "Public Edit"

    name = models.CharField(max_length=12, primary_key=True)
    class Meta: db_table = 'entity_shared_link_permission'

但是,这里不能将
NULL
作为主键值。我应该在这里做什么?一个想法是删除此表上的主键,并使用唯一键(表中没有PK)来解决此问题,但肯定有更好的解决方案。

如果您不希望项目列表经常更改,而且集合很小,那么在我看来,您似乎在尝试设置“选择”字段,Django已经有了。以下是Django文档使用的示例,您可以轻松地根据自己的情况进行调整:

from django.db import models

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

但是,如果您期望权限列表是可变的并且经常更改,则应该考虑允许权限为自己的模型,并且只使用一个外键(或ManyToMany)关系,

简单地说,不能将NULL作为主键列值。您应该始终为主键提供非空值。此外,不要追求独特,它只是不是解决方案,尽管它伪装成一个。如果不能始终提供非null值,请在表中引入一个新的标识列。

如何定义“更好?”使用null作为主键的值,您到底想实现什么?为什么不给OFF值分配另一个字符串呢。比如“没有”?简而言之:你不能。NULL不是一个值。标题似乎有误导性。我认为任何数据库服务器都不允许主键列为null。谢谢。但是,您如何指定一个非高中生(假设我们有这种情况)?您会将其设置为空还是添加一个名为
NOT_IN_HIGHSCHOOL=“NO”
或类似内容的新项目?在这种情况下根本不会有条目。如果存在条目,则用户具有给定的权限。如果没有条目,则用户没有权限。简单的豌豆。