簡體   English   中英

將NULL作為主鍵值

[英]Having NULL as a primary key value

我想要一個實體,如下所示:

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)來解決此問題,但是肯定有更好的解決方案。

簡而言之,您不能將null作為主鍵列值。 您應該始終為主鍵提供非null值。 另外,不要追求獨特,盡管它偽裝成一個,但這不是解決方案。 如果不能總是提供非null值,請改為在表中引入一個新的標識列。

如果您不希望項目列表經常變化並且設置的項目很小,那么在我看來,您正在嘗試設置“ choices”字段,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)

但是,如果您希望權限列表是可變的並且經常更改,則應考慮將權限設為自己的模型,並只需使用ForeignKey(或ManyToMany)關系,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM