我想拥有一个如下实体:
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)来解决此问题,但是肯定有更好的解决方案。
答案 0 :(得分:3)
简单地说,主键列值不能为null。您应该始终为主键提供非null值。另外,不要追求独特,尽管它伪装成一个,但这不是解决方案。如果不能总是提供非null值,请改为在表中引入一个新的标识列。
答案 1 :(得分:1)
如果您不希望项目列表经常更改,并且集合很小,那么在我看来,您正在尝试设置“选择”字段,而Django已经为此提供了{{3 }}。这是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)
但是,如果您希望权限列表是可变的并且经常更改,则应考虑将权限设置为它们自己的模型,而只需使用ForeignKey(或ManyToMany)关系,